То, что я'м пытаюсь сделать, это проверить версию. Я хочу, чтобы код остается на вершине минимальная версия. Так что я нужен способ, чтобы знать, если текущая ветка содержит определенный коммит.
Существует несколько способов для достижения этого результата. Первый наивный вариант-использовать журнале Git
и искать определенный коммит, используя команда grep
, но это не всегда точный
git log | grep <commit_id>
Вы лучше использовать ветку в Git напрямую, чтобы найти все ветки, содержащие учитывая COMMIT_ID
через
git branch --contains $COMMIT_ID
Следующим шагом является выяснение текущей ветки, которые можно сделать с помощью Git 1.8.1 с использованием
git symbolic-ref --short HEAD
И в сочетании вместе
git branch $(git symbolic-ref --short HEAD) --contains $COMMIT_ID
Но команда выше не'т вернуть true или false, а есть более короткая версия, которая возвращает код завершения 0, если коммит в текущей ветке или выхода код 1, если не
git merge-base --is-ancestor $COMMIT_ID HEAD
Код выхода это конечно хорошо, но как вы хотите строку true
или false
в качестве ответа вам нужно добавить немного больше, и то в сочетании с "если" от Баш вы получаете
if [ 0 -eq $(git merge-base --is-ancestor $COMMIT_ID HEAD) ]; then echo "true"; else echo "false"; fi
Получить перечень филиала(ов), который содержит определенный коммит.
# get all the branches where the commit exists
$ git branch --contains <commit-id>
Проверьте, если филиал имеет определенный коммит.
# output the branch-name if the commit exists in that branch
$ git branch --contains <commit-id> | grep <branch-name>
Ветка поиска (скажем, функции
) с точное совпадение.
$ git branch --contains <commit-id> | grep -E '(^|\s)feature$'
например если у вас есть 3 местные отделения под названием особенность
, функция1
, функция2
тогда
$ git branch --contains <commit-id> | grep 'feature'
# output
feature
feature1
feature2
$ git branch --contains <commit-id> | grep -E '(^|\s)feature$'
# output
feature
Вы можете также искать в Local
и удаленных филиалов (используйте
-А) или только в
удаленных филиалов (используйте -Р
).
# search in both 'local' & 'remote' branches
$ git branch -a --contains <commit-id> | grep -E '(^|\s)feature$'
# search in 'remote' branches
$ git branch -r --contains <commit-id> | grep -E '(^|\s)feature$'
Извлеченные комментарий @торек в качестве ответа:
Ознакомиться с предлагаемой дубликат для того, чтобы найти все ветки, которые содержат определенный коммит.
Чтобы выяснить, если тока ветвь содержит коммит c, используйте в "сантехника" и в Git команда слить базу-это-предок
. Текущая ветка содержит C, если c является предком голова, так:
if git merge-base --is-ancestor $hash HEAD; then
echo I contain commit $hash
else
echo I do not contain commit $hash
fi
(Примечание: в shell-скрипты, команды, которая выходит ноль есть "Правда" в то время как один, который выходит ненулевое есть "ложные" по.)
Да еще одна альтернатива:
ГИТ Рэв-список <филиал имя> ГИТ | команда grep `Рэв-анализа <фиксации>`
Это работает лучше всего для меня, так как он также будет работать на локальном кэше удаленных филиалов, таких как пультов/происхождения/мастер
, на котором ветке git-содержит
выиграл't работа.
Это покрывает больше чем ОП'ы просто вопрос о том, что "ветки", но я считаю это глупо спрашивать А "филиал" по версии этот вопрос, поэтому я решил все равно выложить сюда.
Поскольку этот вопрос имеет некоторые хорошие scripty ответы, Я'м добавить избранное.
Это один покажет вам, на последний $Н
совершает в$БР, по которым филиалы содержится в каждой:
br=mybranch
n=10
git log --oneline -n$n $br | awk '{print; system("git branch --contains "$1)}'
Эта похожа, но делает то же самое для списка филиалов:
br="mybranch yourbranch herbranch"
n=4
for br in $brs; do git log --oneline -n$n $br | awk '{print; system("git branch --contains "$1)}'; done