当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
如何确定最后修改了哪一行?
(我们假设最后一次提交是正确的,两个分支修改它的情况更麻烦。)
答案 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