find一个包含对给定文件的更改的Git分支

我有57个地方分支。 我知道我在其中一个文件中改了一个文件,但是我不确定哪一个文件。 是否有某种types的命令,我可以运行find哪些分支包含对某个文件的更改?

查找包含FILENAME变更的所有分支(即使在(未logging)分支点之前)

FILENAME="<filename>" git log --all --format=%H $FILENAME | while read f; do git branch --contains $f; done | sort -u 

手动检查:

 gitk --all --date-order -- $FILENAME 

查找未合并到主文件中的所有对“文件名”的更改:

 git for-each-ref --format="%(refname:short)" refs/heads | grep -v master | while read br; do git cherry master $br | while read xh; do if [ "`git log -n 1 --format=%H $h -- $FILENAME`" = "$h" ]; then echo $br; fi; done; done | sort -u 

所有你需要的是

 git log --all -- path/to/file/filename 

如果你想马上知道这个分支,你也可以

 git log --all --format=%5 -- path/to/file/filename | xargs -I{} -n 1 echo {} found in && git branch --contains {} 

此外,如果您有任何重命名,您可能需要包括 – --follow git log命令。

希望这可以帮助。

这是一个不起眼的蛮力方法,但我希望它能起作用。 确保你已经隐藏了任何未提交的更改,因为它将切换当前所在的分支。

 for branch in $(git for-each-ref --format="%(refname:short)" refs/heads); do git checkout $branch && git grep SOMETHING done