如何使用git获取冲突文件的共同祖先

时间:2018-05-22 09:53:04

标签: git git-merge-conflict

我合并了两个分支并且发生了冲突。其中一个只是一团糟,因为它在一个分支上被强烈重新考虑(B1)。但是,我希望另一个分支(B2)包含一个简单的改变,不幸的是,它影响了很多行。

所以我认为最简单的合并方法是保持B1,并重新对B2进行更改。但是我想在开始之前确定B2上的变化是什么,以确保我不会忘记任何事情。

要这样做,

  • 我想知道2个分支之间的最新共同祖先提交此文件
  • 理想情况下,我想在目前的“冲突合并”情况下这样做而不必结帐

2 个答案:

答案 0 :(得分:3)

请注意,当您正在手动合并某些冲突文件file.ext时,该文件的所有三个版本都存储在index / staging-area中,为这种情况保留的插槽。他们编号:

  • 插槽1包含基本版本;
  • 插槽2保存--ours提交中的HEAD版本;
  • 插槽3保存另一个提交的--theirs版本。

虽然git checkout--ours--theirs来提取这两个版本,但它缺少基本版本的选项。但是,git show可用于提取所有三个版本:

git show :1:file.ext > file.ext.base
git show :2:file.ext > file.ext.ours
git show :3:file.ext > file.ext.theirs
例如

如果您使用git mergetool命令,它只是一个shell脚本包装器,它执行上述操作(使用略有不同的名称),然后在这三个文件上运行您选择的合并工具。

答案 1 :(得分:0)

我记得它:

git merge-base B1 B2

给出分支B1和B2的共同祖先。这适用于整个分支机构。但以后的更改不适用于两个分支上的任何文件。

然后,要看到差异,只需

git diff common_ancestor..B2 path/to/the/file 

其中common_ancestor是使用git merge-base

获取的提交