Merge branch 'lt/reset-merge'
* lt/reset-merge: Document "git-reset --merge" Add 'merge' mode to 'git reset'
This commit is contained in:
commit
c32f76f4d2
@ -8,7 +8,7 @@ git-reset - Reset current HEAD to the specified state
|
||||
SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git reset' [--mixed | --soft | --hard] [-q] [<commit>]
|
||||
'git reset' [--mixed | --soft | --hard | --merge] [-q] [<commit>]
|
||||
'git reset' [-q] [<commit>] [--] <paths>...
|
||||
|
||||
DESCRIPTION
|
||||
@ -45,6 +45,11 @@ OPTIONS
|
||||
switched to. Any changes to tracked files in the working tree
|
||||
since <commit> are lost.
|
||||
|
||||
--merge::
|
||||
Resets the index to match the tree recorded by the named commit,
|
||||
and updates the files that are different between the named commit
|
||||
and the current commit in the working tree.
|
||||
|
||||
-q::
|
||||
Be quiet, only report errors.
|
||||
|
||||
@ -152,6 +157,28 @@ tip of the current branch in ORIG_HEAD, so resetting hard to it
|
||||
brings your index file and the working tree back to that state,
|
||||
and resets the tip of the branch to that commit.
|
||||
|
||||
Undo a merge or pull inside a dirty work tree::
|
||||
+
|
||||
------------
|
||||
$ git pull <1>
|
||||
Auto-merging nitfol
|
||||
Merge made by recursive.
|
||||
nitfol | 20 +++++----
|
||||
...
|
||||
$ git reset --merge ORIG_HEAD <2>
|
||||
------------
|
||||
+
|
||||
<1> Even if you may have local modifications in your
|
||||
working tree, you can safely say "git pull" when you know
|
||||
that the change in the other branch does not overlap with
|
||||
them.
|
||||
<2> After inspecting the result of the merge, you may find
|
||||
that the change in the other branch is unsatisfactory. Running
|
||||
"git reset --hard ORIG_HEAD" will let you go back to where you
|
||||
were, but it will discard your local changes, which you do not
|
||||
want. "git reset --merge" keeps your local changes.
|
||||
|
||||
|
||||
Interrupted workflow::
|
||||
+
|
||||
Suppose you are interrupted by an urgent fix request while you
|
||||
|
@ -20,11 +20,14 @@
|
||||
#include "parse-options.h"
|
||||
|
||||
static const char * const git_reset_usage[] = {
|
||||
"git reset [--mixed | --soft | --hard] [-q] [<commit>]",
|
||||
"git reset [--mixed | --soft | --hard | --merge] [-q] [<commit>]",
|
||||
"git reset [--mixed] <commit> [--] <paths>...",
|
||||
NULL
|
||||
};
|
||||
|
||||
enum reset_type { MIXED, SOFT, HARD, MERGE, NONE };
|
||||
static const char *reset_type_names[] = { "mixed", "soft", "hard", "merge", NULL };
|
||||
|
||||
static char *args_to_str(const char **argv)
|
||||
{
|
||||
char *buf = NULL;
|
||||
@ -49,7 +52,7 @@ static inline int is_merge(void)
|
||||
return !access(git_path("MERGE_HEAD"), F_OK);
|
||||
}
|
||||
|
||||
static int reset_index_file(const unsigned char *sha1, int is_hard_reset, int quiet)
|
||||
static int reset_index_file(const unsigned char *sha1, int reset_type, int quiet)
|
||||
{
|
||||
int i = 0;
|
||||
const char *args[6];
|
||||
@ -57,9 +60,17 @@ static int reset_index_file(const unsigned char *sha1, int is_hard_reset, int qu
|
||||
args[i++] = "read-tree";
|
||||
if (!quiet)
|
||||
args[i++] = "-v";
|
||||
args[i++] = "--reset";
|
||||
if (is_hard_reset)
|
||||
switch (reset_type) {
|
||||
case MERGE:
|
||||
args[i++] = "-u";
|
||||
args[i++] = "-m";
|
||||
break;
|
||||
case HARD:
|
||||
args[i++] = "-u";
|
||||
/* fallthrough */
|
||||
default:
|
||||
args[i++] = "--reset";
|
||||
}
|
||||
args[i++] = sha1_to_hex(sha1);
|
||||
args[i] = NULL;
|
||||
|
||||
@ -169,9 +180,6 @@ static void prepend_reflog_action(const char *action, char *buf, size_t size)
|
||||
warning("Reflog action message too long: %.*s...", 50, buf);
|
||||
}
|
||||
|
||||
enum reset_type { MIXED, SOFT, HARD, NONE };
|
||||
static const char *reset_type_names[] = { "mixed", "soft", "hard", NULL };
|
||||
|
||||
int cmd_reset(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int i = 0, reset_type = NONE, update_ref_status = 0, quiet = 0;
|
||||
@ -186,6 +194,8 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
||||
OPT_SET_INT(0, "soft", &reset_type, "reset only HEAD", SOFT),
|
||||
OPT_SET_INT(0, "hard", &reset_type,
|
||||
"reset HEAD, index and working tree", HARD),
|
||||
OPT_SET_INT(0, "merge", &reset_type,
|
||||
"reset HEAD, index and working tree", MERGE),
|
||||
OPT_BOOLEAN('q', NULL, &quiet,
|
||||
"disable showing new HEAD in hard reset and progress message"),
|
||||
OPT_END()
|
||||
@ -266,7 +276,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
|
||||
if (is_merge() || read_cache() < 0 || unmerged_cache())
|
||||
die("Cannot do a soft reset in the middle of a merge.");
|
||||
}
|
||||
else if (reset_index_file(sha1, (reset_type == HARD), quiet))
|
||||
else if (reset_index_file(sha1, reset_type, quiet))
|
||||
die("Could not reset index file to revision '%s'.", rev);
|
||||
|
||||
/* Any resets update HEAD to the head being switched to,
|
||||
|
Loading…
Reference in New Issue
Block a user