[PATCH 5/7] unstage: add 'unstage' command
From: Felipe Contreras <hidden>
Date: 2021-08-11 04:57:44
Subsystem:
documentation, the rest · Maintainers:
Jonathan Corbet, Linus Torvalds
Signed-off-by: Felipe Contreras <redacted> --- Documentation/git-unstage.txt | 25 +++++++++++++++++++++++++ builtin.h | 1 + builtin/stage.c | 15 +++++++++++++++ git.c | 1 + t/t3710-stage.sh | 7 +++++++ 5 files changed, 49 insertions(+) create mode 100644 Documentation/git-unstage.txt
diff --git a/Documentation/git-unstage.txt b/Documentation/git-unstage.txt
new file mode 100644
index 0000000000..cafc24cb36
--- /dev/null
+++ b/Documentation/git-unstage.txt@@ -0,0 +1,25 @@ +git-unstage(1) +============== + +NAME +---- +git-unstage - Remove changes from the staging area + + +SYNOPSIS +-------- +[verse] +'git unstage' [options] [--] [<paths>...] + +DESCRIPTION +----------- + +Removes changes from the staging area. This is the same as `git reset`. + +SEE ALSO +-------- +linkgit:git-reset[1] + +GIT +--- +Part of the linkgit:git[1] suite
diff --git a/builtin.h b/builtin.h
index d08d803c4f..326f8af3e7 100644
--- a/builtin.h
+++ b/builtin.h@@ -229,6 +229,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix); int cmd_tar_tree(int argc, const char **argv, const char *prefix); int cmd_unpack_file(int argc, const char **argv, const char *prefix); int cmd_unpack_objects(int argc, const char **argv, const char *prefix); +int cmd_unstage(int argc, const char **argv, const char *prefix); int cmd_update_index(int argc, const char **argv, const char *prefix); int cmd_update_ref(int argc, const char **argv, const char *prefix); int cmd_update_server_info(int argc, const char **argv, const char *prefix);
diff --git a/builtin/stage.c b/builtin/stage.c
index dee8781dc5..2d50b3c393 100644
--- a/builtin/stage.c
+++ b/builtin/stage.c@@ -13,6 +13,11 @@ static const char *const stage_usage[] = { NULL }; +static const char *const unstage_usage[] = { + N_("git unstage [options] [--] <paths>..."), + NULL +}; + static int rerun(int argc, const char **argv, ...) { int ret;
@@ -52,3 +57,13 @@ int cmd_stage(int argc, const char **argv, const char *prefix) return rerun(argc, argv, "add", NULL); } + +int cmd_unstage(int argc, const char **argv, const char *prefix) +{ + struct option options[] = { OPT_END() }; + + argc = parse_options(argc, argv, prefix, options, unstage_usage, + PARSE_OPT_KEEP_UNKNOWN | PARSE_OPT_KEEP_DASHDASH); + + return rerun(argc, argv, "reset", NULL); +}
diff --git a/git.c b/git.c
index 3b92e60329..2d319cc15b 100644
--- a/git.c
+++ b/git.c@@ -607,6 +607,7 @@ static struct cmd_struct commands[] = { { "switch", cmd_switch, RUN_SETUP | NEED_WORK_TREE }, { "symbolic-ref", cmd_symbolic_ref, RUN_SETUP }, { "tag", cmd_tag, RUN_SETUP | DELAY_PAGER_CONFIG }, + { "unstage", cmd_unstage, RUN_SETUP | NEED_WORK_TREE }, { "unpack-file", cmd_unpack_file, RUN_SETUP | NO_PARSEOPT }, { "unpack-objects", cmd_unpack_objects, RUN_SETUP | NO_PARSEOPT }, { "update-index", cmd_update_index, RUN_SETUP },
diff --git a/t/t3710-stage.sh b/t/t3710-stage.sh
index 209f2bde9a..834eee66d5 100755
--- a/t/t3710-stage.sh
+++ b/t/t3710-stage.sh@@ -28,4 +28,11 @@ test_expect_success 'remove' ' ! in_stage bar ' +test_expect_success 'unstage' ' + touch bar && + git stage bar && + git unstage bar && + ! in_stage bar +' + test_done
--
2.32.0.48.g096519100f