查看文件由git自动合并

时间:2015-11-04 16:23:32

标签: git

在“git pull”之后,您收到消息:

Merge made by the 'recursive' strategy.

你怎么知道哪些文件存在冲突?我希望能够检查git对我的文件做了哪些更改......

1 个答案:

答案 0 :(得分:1)

小心“冲突”一词:如果git merge的{​​{1}}步骤自动完成,则表示没有任何冲突,或者您有{{1}已启用并使用重新 解决方案来解决冲突。我怀疑你的意思是“如何看待git从合并后的git pull部分带来的变化”。

也就是说,假设提交图在git rerere的{​​{1}}步骤之后看起来像这样。这里的每个单个字母代表一个提交,我假设你上次和你的上游同步时做了两次提交(origin/branchgit fetch),他们做了两次提交({{ 1}}和git pull):

A

此时,B执行了下半部分C,以生成新的合并提交。我们称之为D

              A - B   <-- branch
            /
... - o - o
            \
              C - D   <-- origin/branch

据推测,您知道自己做了哪些更改,并希望了解git pullgit merge(您最近的更改)相比有哪些更改。

要找到答案,首先要找到提交M的SHA-1 ID,然后只需运行 A - B / \ ... - o - o M <-- branch \ / C - D <-- origin/branch 即可。 (名称M很容易找到提交B,所以你需要找到它B,向git请求这个差异。)

实际上有一种简单的方法可以找到git diff <id-of-B> branch的ID。 branch始终是M的“第一个父母”。像B之类的合并提交至少有两个父提交,而第一个一个是你的分支之前的那个(或{ {1}})运行B。 (第二个父在这里是提交B,因为这是你合并的内容。)git中有一个特殊的语法用于引用first-parents--实际上是两个这样的语法,但是让我们使用M现在的语法:

M

名称git pull标识特定提交,即git merge <whatever>。每个D在之后添加标识特定提交的内容意味着“现在转到该东西的第一个父级”,因此^标识提交$ git diff branch^ branch 。如果您要查找提交branch,请添加另一个M以获取^。要查找最右侧的branch^提交,您可以编写B,依此类推。

您可以稍微压缩此表示法:A表示^,即三个后缀branch^^; o表示branch^^^,依此类推。

如果您想找到branch~3第二个父级,即在上图中提交branch^^^,该怎么办?您可以在^之后添加一个数字,以说明哪个父级:branch~5提交branch^^^^^。 (如果你要求M,你会收到一个错误,因为提交D只有两个父母,而不是三个。合并可以有两个以上的父提交,但这些是不寻常的。 )

如果要查找提交^,可以先使用branch^2查找D,然后添加另一个branch^3M标识提交{ {1}}。由于C的父级是最右侧branch^2次提交,D标识提交^,就像branch^2^C一样。

(您可以使用C查看所有这些内容,它会打印出任何git对象的完整40个字符的SHA-1 ID,并给出一个解析该对象的名称。只需运行o这是一个只读操作,因此您可以在一个窗口中播放它,同时在另一个窗口中查看图形。另外,请查看the gitrevisions documentation。)