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



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

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

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

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

类似地,对于"一些无意义的提交消息",该行应该包含一个SHA-1哈希,您也可以将其与git show <commit>一起使用,以查找提交的日期和时间。

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

经过进一步研究后编辑:可能有一种合并策略(git merge -s <strategy> [-X <strategy-option>])可以根据时间戳自动进行合并,但我在文档中找不到这样的选项。

经过更多研究后编辑:请参阅此处,了解可能与您的兴趣有关的类似但争议较小的SO问题。你可能不想要一个自动化的过程,那里的解决方案可能不适合你的情况,但那里提供的自定义合并驱动程序可能会帮助你。

在一个分布在多个存储库之间的股票Git配置中,你不能依赖日期来可靠地告诉你哪个提交比另一个"新"。

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

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

也就是说。。。

对于冲突的文件,你可以做

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

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

git不存在正确或不正确的行,您决定哪一个是最好的选项,您只需要看到标签"header"one_answers"[other branch]",header是您当前的分支。

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

如果你需要两个类,你必须写新行

div.some-class.another-class

相关内容

  • 没有找到相关文章

最新更新