mirror of
https://github.com/git/git.git
synced 2026-04-14 02:40:08 +02:00
Merge branch 'pb/complete-and-document-auto-merge-and-friends'
Document more pseudo-refs and teach the command line completion machinery to complete AUTO_MERGE. * pb/complete-and-document-auto-merge-and-friends: completion: complete AUTO_MERGE Documentation: document AUTO_MERGE git-merge.txt: modernize word choice in "True merge" section completion: complete REVERT_HEAD and BISECT_HEAD revisions.txt: document more special refs revisions.txt: use description list for special refs
This commit is contained in:
@@ -102,7 +102,11 @@ If --merge-base is given, use the merge base of the two commits for the
|
||||
Just in case you are doing something exotic, it should be
|
||||
noted that all of the <commit> in the above description, except
|
||||
in the `--merge-base` case and in the last two forms that use `..`
|
||||
notations, can be any <tree>.
|
||||
notations, can be any <tree>. A tree of interest is the one pointed to
|
||||
by the special ref `AUTO_MERGE`, which is written by the 'ort' merge
|
||||
strategy upon hitting merge conflicts (see linkgit:git-merge[1]).
|
||||
Comparing the working tree with `AUTO_MERGE` shows changes you've made
|
||||
so far to resolve textual conflicts (see the examples below).
|
||||
|
||||
For a more complete list of ways to spell <commit>, see
|
||||
"SPECIFYING REVISIONS" section in linkgit:gitrevisions[7].
|
||||
@@ -152,6 +156,7 @@ Various ways to check your working tree::
|
||||
$ git diff <1>
|
||||
$ git diff --cached <2>
|
||||
$ git diff HEAD <3>
|
||||
$ git diff AUTO_MERGE <4>
|
||||
------------
|
||||
+
|
||||
<1> Changes in the working tree not yet staged for the next commit.
|
||||
@@ -159,6 +164,8 @@ $ git diff HEAD <3>
|
||||
would be committing if you run `git commit` without `-a` option.
|
||||
<3> Changes in the working tree since your last commit; what you
|
||||
would be committing if you run `git commit -a`
|
||||
<4> Changes in the working tree you've made to resolve textual
|
||||
conflicts so far.
|
||||
|
||||
Comparing with arbitrary commits::
|
||||
+
|
||||
|
||||
@@ -194,9 +194,13 @@ happens:
|
||||
versions: stage 1 stores the version from the common ancestor,
|
||||
stage 2 from `HEAD`, and stage 3 from `MERGE_HEAD` (you
|
||||
can inspect the stages with `git ls-files -u`). The working
|
||||
tree files contain the result of the "merge" program; i.e. 3-way
|
||||
tree files contain the result of the merge operation; i.e. 3-way
|
||||
merge results with familiar conflict markers `<<<` `===` `>>>`.
|
||||
5. No other changes are made. In particular, the local
|
||||
5. A special ref `AUTO_MERGE` is written, pointing to a tree
|
||||
corresponding to the current content of the working tree (including
|
||||
conflict markers for textual conflicts). Note that this ref is only
|
||||
written when the 'ort' merge strategy is used (the default).
|
||||
6. No other changes are made. In particular, the local
|
||||
modifications you had before you started merge will stay the
|
||||
same and the index entries for them stay as they were,
|
||||
i.e. matching `HEAD`.
|
||||
@@ -336,7 +340,8 @@ You can work through the conflict with a number of tools:
|
||||
|
||||
* Look at the diffs. `git diff` will show a three-way diff,
|
||||
highlighting changes from both the `HEAD` and `MERGE_HEAD`
|
||||
versions.
|
||||
versions. `git diff AUTO_MERGE` will show what changes you've
|
||||
made so far to resolve textual conflicts.
|
||||
|
||||
* Look at the diffs from each branch. `git log --merge -p <path>`
|
||||
will show diffs first for the `HEAD` version and then the
|
||||
|
||||
@@ -30,10 +30,11 @@ characters and to avoid word splitting.
|
||||
explicitly say 'heads/master' to tell Git which one you mean.
|
||||
When ambiguous, a '<refname>' is disambiguated by taking the
|
||||
first match in the following rules:
|
||||
|
||||
+
|
||||
. If '$GIT_DIR/<refname>' exists, that is what you mean (this is usually
|
||||
useful only for `HEAD`, `FETCH_HEAD`, `ORIG_HEAD`, `MERGE_HEAD`
|
||||
and `CHERRY_PICK_HEAD`);
|
||||
useful only for `HEAD`, `FETCH_HEAD`, `ORIG_HEAD`, `MERGE_HEAD`,
|
||||
`REBASE_HEAD`, `REVERT_HEAD`, `CHERRY_PICK_HEAD`, `BISECT_HEAD`
|
||||
and `AUTO_MERGE`);
|
||||
|
||||
. otherwise, 'refs/<refname>' if it exists;
|
||||
|
||||
@@ -44,19 +45,38 @@ characters and to avoid word splitting.
|
||||
. otherwise, 'refs/remotes/<refname>' if it exists;
|
||||
|
||||
. otherwise, 'refs/remotes/<refname>/HEAD' if it exists.
|
||||
|
||||
+
|
||||
`HEAD` names the commit on which you based the changes in the working tree.
|
||||
`FETCH_HEAD` records the branch which you fetched from a remote repository
|
||||
with your last `git fetch` invocation.
|
||||
`ORIG_HEAD` is created by commands that move your `HEAD` in a drastic
|
||||
way (`git am`, `git merge`, `git rebase`, `git reset`),
|
||||
to record the position of the `HEAD` before their operation, so that
|
||||
you can easily change the tip of the branch back to the state before you ran
|
||||
them.
|
||||
`MERGE_HEAD` records the commit(s) which you are merging into your branch
|
||||
when you run `git merge`.
|
||||
`CHERRY_PICK_HEAD` records the commit which you are cherry-picking
|
||||
when you run `git cherry-pick`.
|
||||
`HEAD`:::
|
||||
names the commit on which you based the changes in the working tree.
|
||||
`FETCH_HEAD`:::
|
||||
records the branch which you fetched from a remote repository with
|
||||
your last `git fetch` invocation.
|
||||
`ORIG_HEAD`:::
|
||||
is created by commands that move your `HEAD` in a drastic way (`git
|
||||
am`, `git merge`, `git rebase`, `git reset`), to record the position
|
||||
of the `HEAD` before their operation, so that you can easily change
|
||||
the tip of the branch back to the state before you ran them.
|
||||
`MERGE_HEAD`:::
|
||||
records the commit(s) which you are merging into your branch when you
|
||||
run `git merge`.
|
||||
`REBASE_HEAD`:::
|
||||
during a rebase, records the commit at which the operation is
|
||||
currently stopped, either because of conflicts or an `edit` command in
|
||||
an interactive rebase.
|
||||
`REVERT_HEAD`:::
|
||||
records the commit which you are reverting when you run `git revert`.
|
||||
`CHERRY_PICK_HEAD`:::
|
||||
records the commit which you are cherry-picking when you run `git
|
||||
cherry-pick`.
|
||||
`BISECT_HEAD`:::
|
||||
records the current commit to be tested when you run `git bisect
|
||||
--no-checkout`.
|
||||
`AUTO_MERGE`:::
|
||||
records a tree object corresponding to the state the
|
||||
'ort' merge strategy wrote to the working tree when a merge operation
|
||||
resulted in conflicts.
|
||||
|
||||
+
|
||||
Note that any of the 'refs/*' cases above may come either from
|
||||
the `$GIT_DIR/refs` directory or from the `$GIT_DIR/packed-refs` file.
|
||||
|
||||
@@ -1343,6 +1343,33 @@ $ git diff -3 file.txt # diff against stage 3
|
||||
$ git diff --theirs file.txt # same as the above.
|
||||
-------------------------------------------------
|
||||
|
||||
When using the 'ort' merge strategy (the default), before updating the working
|
||||
tree with the result of the merge, Git writes a special ref named AUTO_MERGE
|
||||
reflecting the state of the tree it is about to write. Conflicted paths with
|
||||
textual conflicts that could not be automatically merged are written to this
|
||||
tree with conflict markers, just as in the working tree. AUTO_MERGE can thus be
|
||||
used with linkgit:git-diff[1] to show the changes you've made so far to resolve
|
||||
conflicts. Using the same example as above, after resolving the conflict we
|
||||
get:
|
||||
|
||||
-------------------------------------------------
|
||||
$ git diff AUTO_MERGE
|
||||
diff --git a/file.txt b/file.txt
|
||||
index cd10406..8bf5ae7 100644
|
||||
--- a/file.txt
|
||||
+++ b/file.txt
|
||||
@@ -1,5 +1 @@
|
||||
-<<<<<<< HEAD:file.txt
|
||||
-Hello world
|
||||
-=======
|
||||
-Goodbye
|
||||
->>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt
|
||||
+Goodbye world
|
||||
-------------------------------------------------
|
||||
|
||||
Notice that the diff shows we deleted the conflict markers and both versions of
|
||||
the content line, and wrote "Goodbye world" instead.
|
||||
|
||||
The linkgit:git-log[1] and linkgit:gitk[1] commands also provide special help
|
||||
for merges:
|
||||
|
||||
|
||||
@@ -767,7 +767,7 @@ __git_refs ()
|
||||
track=""
|
||||
;;
|
||||
*)
|
||||
for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD REBASE_HEAD CHERRY_PICK_HEAD; do
|
||||
for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD REBASE_HEAD CHERRY_PICK_HEAD REVERT_HEAD BISECT_HEAD AUTO_MERGE; do
|
||||
case "$i" in
|
||||
$match*|$umatch*)
|
||||
if [ -e "$dir/$i" ]; then
|
||||
|
||||
Reference in New Issue
Block a user