[PATCH v2 try2 12/14] reset: add --stage and --work options
From: Felipe Contreras <hidden>
Date: 2016-06-15 23:00:50
Subsystem:
documentation, the rest · Maintainers:
Jonathan Corbet, Linus Torvalds
Signed-off-by: Felipe Contreras <redacted> --- Documentation/git-reset.txt | 8 ++++++++ builtin/reset.c | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+)
diff --git a/Documentation/git-reset.txt b/Documentation/git-reset.txt
index f445cb3..5cd75a8 100644
--- a/Documentation/git-reset.txt
+++ b/Documentation/git-reset.txt@@ -11,6 +11,7 @@ SYNOPSIS 'git reset' [-q] [<tree-ish>] [--] <paths>... 'git reset' (--patch | -p) [<tree-ish>] [--] [<paths>...] 'git reset' [--soft | --mixed | --hard | --merge | --keep] [-q] [<commit>] +'git reset' [--stage | --work] [-q] [<commit>] DESCRIPTION -----------
@@ -81,6 +82,13 @@ but carries forward unmerged index entries. different between <commit> and HEAD. If a file that is different between <commit> and HEAD has local changes, reset is aborted. + +--stage:: + Reset the index, basically `--mixed`. `--no-stage` is the equivalent of + `--soft`. + +--work:: + Resets the working tree, basically `--hard`. -- If you want to undo a commit other than the latest on a branch,
diff --git a/builtin/reset.c b/builtin/reset.c
index a991344..c40987e 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c@@ -23,6 +23,7 @@ static const char * const git_reset_usage[] = { N_("git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]"), + N_("git reset [--stage | --work] [-q] [<commit>]"), N_("git reset [-q] <tree-ish> [--] <paths>..."), N_("git reset --patch [<tree-ish>] [--] [<paths>...]"), NULL
@@ -254,6 +255,7 @@ static int reset_refs(const char *rev, const unsigned char *sha1) int cmd_reset(int argc, const char **argv, const char *prefix) { int reset_type = NONE, update_ref_status = 0, quiet = 0; + int stage = -1, working_tree = -1; int patch_mode = 0, unborn; const char *rev; unsigned char sha1[20];
@@ -269,6 +271,8 @@ int cmd_reset(int argc, const char **argv, const char *prefix) N_("reset HEAD, index and working tree"), MERGE), OPT_SET_INT(0, "keep", &reset_type, N_("reset HEAD but keep local changes"), KEEP), + OPT_BOOL(0, "stage", &stage, N_("reset index")), + OPT_BOOL(0, "work", &working_tree, N_("reset working tree")), OPT_BOOL('p', "patch", &patch_mode, N_("select hunks interactively")), OPT_END() };
@@ -301,6 +305,22 @@ int cmd_reset(int argc, const char **argv, const char *prefix) hashcpy(sha1, tree->object.sha1); } + if (stage >= 0 || working_tree >= 0) { + if (reset_type != NONE) + die(_("--{stage,work} are incompatible with --{hard,mixed,soft,merge}")); + + if (working_tree == 1) { + if (stage == 0) + die(_("--no-stage doesn't make sense with --work")); + reset_type = HARD; + } else { + if (stage == 1) + reset_type = NONE; + else + reset_type = SOFT; + } + } + if (patch_mode) { if (reset_type != NONE) die(_("--patch is incompatible with --{hard,mixed,soft}"));
--
1.9.2+fc1.2.gfbaae8c