代码之家  ›  专栏  ›  技术社区  ›  Juh_

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

  •  0
  • Juh_  · 技术社区  · 6 年前

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

    所以我认为最简单的合并方法是保留b1,然后重新执行b2上所做的更改。但在开始之前,我想确定b2上的变化是什么,以确保我不会忘记任何事情。

    为此,

    • 我想知道两个分支之间这个文件的最新公共祖先提交
    • 理想情况下,我想在我目前的“冲突合并”情况下进行,而不必结账。
    2 回复  |  直到 6 年前
        1
  •  3
  •   torek    6 年前

    请注意,在手动合并某些冲突文件的过程中 file.ext , 全部三个 该文件的版本存储在索引/临时区域中,在为本例保留的三个插槽中。编号如下:

    • 插槽1容纳基本版本;
    • 插槽2容纳 --ours 版本来自 HEAD 承诺;
    • 槽3容纳 --theirs 来自另一个提交的版本。

    同时 git checkout --我们的 --他们的 要提取这两个版本,它缺少基本版本的选项。然而, 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脚本包装器,执行上述操作(使用稍微不同的名称),然后在这三个文件上运行选定的合并工具。

        2
  •  0
  •   Juh_    6 年前

    我只记得:

    git merge-base B1 B2
    

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

    然后,为了看区别,只是

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

    其中,共同祖先是使用 git merge-base

    推荐文章