2015-11-04 74 views
2

自动合并当“混帐拉”后,你会得到消息:查看文件由混帐

Merge made by the 'recursive' strategy. 

你怎么能知道哪些人在冲突中的文件?我希望能够确认如何更改我的文件所做的git ...

+0

该信息不会被记录在任何地方。但是,您可以检出旧的提交并重新进行合并,以查看哪些文件会发生冲突。 – Nayuki

+0

我提高了这个问题,因为你的用户名太棒了。 –

回答

1

小心单词“冲突”:如果git merge步骤git pull自动完成,或者有没有任何冲突 ,或者你有git rerere打开,并且git re使用re有线re解决冲突的解决方案。我嫌疑人你的意思是“我如何看到git从合并的origin/branch部分带来什么变化”。

也就是说,假设在git pullgit fetch步骤之后提交图表看起来像这样。这里每一个字母代表一个承诺,我已经假设你自从上次你和你的上游是在同步做两次提交(AB),和他们做了两次提交(CD):

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

此时您的git pull完成了其后半部分git merge,以产生新的合并提交。让我们把这种M

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

想必你知道你做什么样的变化,你希望看到什么样的变化M了,当B(最近的更改)进行比较。

为了找到答案,您首先找到提交B的SHA-1 ID,然后您可以简单地运行git diff <id-of-B> branch。 (名字branch认定犯M容易,所以它的B,你需要找到,问git的这种差异。)

实际上,有找到B的ID的简单方法。 B始终是M的“第一位父母”。像M这样的合并提交至少有两个父提交,并且第一个在您(或git pull)运行git merge <whatever>之前,一个是您的分支的小费。 (第二父提交D这里,因为这是你合并-in。)的有Git中一个特殊的语法参照第一父母,实际上是两个这样的语法,但允许使用^语法现在:

$ git diff branch^ branch 

名称branch标识了一个特定的提交,即M。每个^在之后加上,标识特定提交的东西意味着“现在转到该东西的第一个父代”,因此branch^标识提交B。如果您想查找提交A,请添加另一个^以获取branch^^。要找到最右边的o提交,您可以编写branch^^^,依此类推。

您可以多压缩一下这个表示法:branch~3表示branch^^^,即三个后缀^ s; branch~5表示branch^^^^^等等。

如果你想找到的M母公司,即犯上面的图中D?您可以在^之后添加一个数字,以表示,其中父级:branch^2是提交D。 (如果你问branch^3你得到一个错误的承诺M只有两个家长,而不是三个。梅杰斯可以有两个以上的父母承诺,但这些都是不寻常的。)

如果你想找到犯C,您可以先使用branch^2找到D,然后再添加^branch^2^标识提交C。由于C的父代是最右边的o提交,因此branch^2^^标识提交o,就像branch^^^branch~3一样。

(可以使用git rev-parse,看到这一切,可打印出任何的git对象的全部40个字符的SHA-1 ID鉴于解析为对象的名称。只要运行git rev-parse <name>,这是一个只读的操作,所以你可以在一个窗口中使用它,例如在另一个窗口中查看图形。另外,请看the gitrevisions documentation。)