sto*_*tic 5 git git-merge-conflict
我想知道 git 合并冲突解决期间“共同祖先”提交的身份。
换句话说:我想知道当我在git merge.
希望有一个命令可以告诉我这些信息吗?
为什么我想知道
BASE -> LOCAL和BASE -> REMOTE),以便为我提供更多有关这两组更改如何发生、谁进行、何时、在哪些分支上进行等的背景信息。有用的(?)相关信息
回想一下,对于任何特定的冲突文件,都有
git show :1:<path>),来自共同祖先提交(其身份是我问题的答案)git show :2:<path>版本和git show :3:<path>版本我知道我可以通过使用获取 BASE 文件本身的 SHA 哈希值,git ls-files -u它给出的输出如下
$ git ls-files -u | grep "<path>"
100644 <SHA of BASE file> 1 <path>
100644 <SHA of LOCAL file> 2 <path>
100644 <SHA of REMOTE file> 3 <path>
Run Code Online (Sandbox Code Playgroud)
我正在使用git mergetool和gvimdiff3查看冲突。该工具显示每个冲突文件(带有"<<<"、">>>"、"|||"冲突标记,以及其他三个文件供参考:LOCAL、BASE 和 REMOTE。一切都非常好。
我的 BASE 文件有时包含冲突标记(!),如下所示:
<<<<<<<<< Temporary merge branch 1
<snip>
||||||||| merged common ancestors
=========
<snip>
>>>>>>>>> Temporary merge branch 2
Run Code Online (Sandbox Code Playgroud)
When there is more than one common ancestor that can be used for 3-way merge, it creates a merged tree of the common ancestors and uses that as the reference tree for the 3-way merge.
这个很棘手,而且有点令人讨厌。你在这里完全正确:
我想我看到的是“共同祖先”是多个提交的合并混合体。尽管如此,合并后的混合体一定是以某种方式生成的,必须有 SHA,并且必须有我想知道其身份的父母。
正如LeGEC 所说,当 Git 因合并冲突而停止时,您确实可以同时使用HEAD和。MERGE_HEAD
您可以使用以下命令找到合并基数(复数)的哈希 ID:
git merge-base --all HEAD MERGE_HEAD
Run Code Online (Sandbox Code Playgroud)
由于您使用的是合并递归,Git 所做的是:
git merge-recursive他们。(这本身可能会找到两个以上的合并基础;如果是这样,请参阅此过程。)此过程的最终输出是提交哈希 ID。 此哈希 ID 不会在任何地方保存或显示。当然, 您可以获取此过程的所有输入。git merge-base --all
通常,当合并出现冲突时,Git 会停止并让您修复它们。但是,当合并合并基础产生冲突时,Git 会继续提交冲突的合并基础。不是很好。(我并不是说它不好,只是说它不好:它变得非常混乱。我认为,新的 merge-ort 并没有做到这一点,但我还没有准确地理解它的作用。)这些冲突标记确实是你所看到的。
Git 这里提供的工具并不能完全胜任这项工作,但是使用git merge-base --all,您至少可以检查每个输入。
| 归档时间: |
|
| 查看次数: |
750 次 |
| 最近记录: |