Найти ветку Git, содержащую изменения в данном файле - PullRequest
66 голосов
/ 07 июня 2011

У меня 57 местных филиалов.Я знаю, что внес изменения в определенный файл в одном из них, но я не уверен, какой именно.Есть ли какая-нибудь команда, которую я могу запустить, чтобы найти, какие ветви содержат изменения в определенном файле?

Ответы [ 3 ]

70 голосов
/ 07 июня 2011

Найти все ветви, которые содержат изменения в 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
39 голосов
/ 07 июня 2011

Все, что вам нужно, это

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.

0 голосов
/ 07 июня 2011

Ниже приведен неумелый метод грубой силы, но я ожидаю, что он должен сработать.Сначала убедитесь, что вы спрятали все незафиксированные изменения, поскольку это переключит, в какой ветке вы находитесь в данный момент.

for branch in $(git for-each-ref --format="%(refname:short)" refs/heads); do
    git checkout $branch && git grep SOMETHING
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...