在Git中,找到更改相同对象的合并分支

时间:2016-11-02 21:27:28

标签: git merge git-bash

我在Git中有发布分支,其中许多其他分支被合并。我想在发布分支中找到文件,这些文件是从多个分支合并而来的。我还想收到更改相同对象的分支名称。

例如,如果在file_xBranch1Branch2中更改了Branch3,并且所有三个分支都合并到Release分支中,则预期结果Git命令应该是:

file_x - Branch1 Branch2 Branch3

2 个答案:

答案 0 :(得分:1)

假设所有合并都是使用--no-ff进行的,并且每个合并提交的注释都包含合并的分支名称,并且不会删除任何分支。

在发布分支上,git log --merges --pretty=format:'%h: %s'列出了如下所示的合并提交:

$ git log --merges --pretty=format:'%h: %s'
cca9cf0: Merge branch 'Branch1'

在这种情况下,如果git log cca9cf0^..Branch1 file_x显示任何日志,则在Branch1中更改了file_x,否则在Branch1中没有更改file_x。

因此,您可以编写一个脚本,通过第一个git log命令查找所有合并提交和分支,检查是否使用每个分支的第二个git log命令更改了给定文件,并打印更改文件的分支。

答案 1 :(得分:1)

git log --first-parent --merges -m --name-only --format=%x0a%H \
| awk '
        NF==0    { tagline=!tagline;next }
        tagline  { commit=$1 }
        !tagline { print commit,$0 }
' \
| sort -k2 | uniq -Df1

会将所有受到多次合并影响的文件提供给您的签出分支,以及影响它们的合并。