合并冲突:从冲突文件中收集相关提交

时间:2014-03-03 17:27:53

标签: git

鉴于合并冲突,

  1. 收集冲突的文件列表
  2. 确定此文件列表中的相关提交
  3. 示例:

    MERGE Conflict!
     |\
     | \
     |  \
     A  B
     | /
     |/
     C
     |
     |
    

    B和A的提交都改变了foo.txt,造成了冲突。

    当B合并到A中时,我希望A或B中的所有提交但在C之前改变了foo.txt

2 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,那么您需要查找影响给定文件的所有提交 之前分支分歧:

你首先想弄清楚两个分支的分歧:

git merge-base A B

这应该让你得到提交C的哈希。

获取未合并文件的列表:

git diff --name-only --diff-filter=U

然后你可以这样做:

git log <hash of C> -- <file path>

为每个未合并的文件找到已影响该文件的提交列表,包括提交C。

答案 1 :(得分:1)

鉴于您的上述历史,请:

git log A B ^C -- foo.txt

将显示更改文件A的{​​{1}}或B分支中的所有提交(我假设您确实希望在之后提交 foo.txt,而不是之前的 - 但如果您想要C之前的提交,则可以执行C)。如果您实际上不知道git log C -- foo.txt的哈希值,则可以使用C来确定它。如果您想查看每次提交中的实际更改,而不仅仅是提交列表,请使用git merge-branch A B