我在Git中有发布分支,其中许多其他分支被合并。我想在发布分支中找到文件,这些文件是从多个分支合并而来的。我还想收到更改相同对象的分支名称。
例如,如果在file_x
,Branch1
和Branch2
中更改了Branch3
,并且所有三个分支都合并到Release
分支中,则预期结果Git命令应该是:
file_x - Branch1 Branch2 Branch3
答案 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
会将所有受到多次合并影响的文件提供给您的签出分支,以及影响它们的合并。