Git与冲突合并 - 后来提交了哪一行

时间:2014-10-14 12:39:59

标签: git branching-and-merging

git merge期间出现冲突时,我有时想知道哪一行是正确的(哪一行是最后修改过的)。例如:

<<<<<<< HEAD
  div.some-class
=======
  div.another-class
>>>>>>> commit message that doesn't give clue which commit to choose
#no clue which is good

如何确定最后修改了哪一行?

(我们假设最后一次提交是正确的,两个分支修改它的情况更麻烦。)

3 个答案:

答案 0 :(得分:1)

如果您真的只关心日期,git show HEAD应该为您提供HEAD的日期和时间。如果您需要有关特定行的更多详细信息,git blame <filename>应该可以帮助您找到相关的提交,然后您可以使用git show <commit>来查找这些日期和时间。

同样,对于&#34;一些无意义的提交消息&#34;,该行应该包含一个SHA-1哈希,您也可以使用git show <commit>来查找该提交的日期和时间。< / p>

然而,值得重申的是,在大多数情况下,检查冲突提交的内容并基于此做出决定更为重要。

进一步研究后编辑:有可能存在一个合并策略(git merge -s <strategy> [-X <strategy-option>]),它会根据时间戳自动合并,但我无法找到这样的documentation中的一个选项。

在更多研究之后进行编辑:请参阅here,了解可能与您的兴趣相关的类似但不那么有争议的问题。您可能不需要自动化过程,并且该解决方案可能无法满足您的需求,但也许提供的自定义合并驱动程序可以为您提供帮助。

答案 1 :(得分:0)

在库存Git配置中,您在多个存储库之间分配,您无法依赖日期可靠地告诉您哪个提交比另一个提交“更新”。

即使你可以,我也会犹豫是否采用基于它的合并策略。

另外,如果你正在查看冲突标记,你可能最好选择一个图形合并工具来解决你的冲突(无论哪一个,它们都优于手动合并)。如果您想手动合并,建议使用merge.conflictstyle diff3

那说......

对于您可以执行的冲突文件

git log --pretty=%cd -1 HEAD -- <conflicted_file>
git log --pretty=%cd -1 MERGE_HEAD -- <conflicted_file>

这将为您提供每个分支上最近修改文件的提交者日期(如前所述,这最好是半可靠的)。您可以将其包装在一个简单的脚本中,该脚本为每个未合并的文件执行上述操作,然后打印出文件和“我们的”或“他们的”甚至。

答案 2 :(得分:-1)

git不存在正确或不正确的行,您决定哪个是最佳选项,您只需要看到标记&#34;标题&#34;和&#34; [其他分支]&#34;,标题是您当前的分支。

<<<<<<< HEAD (your actually branch)
  div.some-class
======= (other branch)
  div.another-class
>>>>>>> some meaningless commit message

如果您需要两个课程,则必须编写新行

div.some-class.another-class