查找包含对给定文件所做更改的Git分支

问题描述

| 我有57个当地分支机构。我知道我对其中一个文件进行了更改,但是我不确定是哪个文件。我可以运行某种命令来查找哪些分支包含对某个文件的更改吗?     

解决方法

        查找所有包含FILENAME更改的分支(即使在(未记录的)分支点之前)
FILENAME=\"<filename>\"
git log --all --format=%H $FILENAME | while read f; do git branch --contains $f; done | sort -u
手动检查:
gitk --all --date-order -- $FILENAME
查找所有未合并到FILENAME的更改:
git for-each-ref --format=\"%(refname:short)\" refs/heads | grep -v master | while read br; do git cherry master $br | while read x h; 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 {}
此外,如果您有任何重命名,则可能要在Git log命令中包括ѭ5。     ,        如果没有适当的解决方案,这似乎仍然是一个问题。我没有足够的积分来发表评论,所以这是我的一点贡献。 塞斯·罗伯森(Seth Robertson)的第一种解决方案对我来说有点用,但只给了我本地分支机构,其中有许多误报,可能是因为稳定分支机构合并了。 亚当·迪米特鲁克(Adam Dymitruk)的第二个解决方案根本不适合我。对于初学者来说,--format =%5是什么?它不能被git识别,我找不到任何相关信息,也无法使其与其他格式选项一起使用。 但是他的第一个解决方案结合了--source选项和简单的grep证明是有帮助的:
git log --all --source -- <filename> | grep -o \"refs/.*\" | sort -u
这给了我许多远程标记和分支,以及一个本地分支,在这里我对该文件进行了最新更改。不知道这有多完整。     ,        以下是一种蛮力的蛮力方法,但我希望它可以工作。确保首先隐藏所有未提交的更改,因为这将切换您当前所在的分支。
for branch in $(git for-each-ref --format=\"%(refname:short)\" refs/heads); do
    git checkout $branch && git grep SOMETHING
done