Попробуйте следующий фрагмент как скрипт, чтобы проверить, является ли фиксация слиянием.
#!/bin/bash
commit_hash=$(git rev-parse HEAD)
parent_hashes=`git rev-list --parents -n 1 $commit_hash`
parent_count=`wc -w <<< $parent_hashes`
if [[ $parent_count -gt 2 ]]
then
p=`git name-rev $parent_hashes | xargs -0 | grep -e '^\S\+ master$'`
if [[ ! -z $p ]]
then
echo "merged; master"
exit 0
else
echo "merged; non-master"
exit 2
fi
else
echo "not merged"
exit 1
fi
Фон
В git слияние просто означает, что коммит имеет более одного родителя.
Команда git rev-list --parents -n 1 $commit_hash
возвращает набор хэшей коммитов, которые являются родителями этого коммита.
Чтобы проверить, существует ли больше2 родителя *, wc -w <<< $parent_hashes
проверено.
, передавая его по xargs
, git name-rev
соберет имя ссылки каждого коммита, чтобы мы могли проверить, является ли оно master
- это то, что команда grep -e (fancy regex)
делает
Наконец, команда печатает некоторый отладочный текст и возвращает код выхода в зависимости от ситуации.
Отказ от ответственности
Этот сценарий не готов к работе.Могут быть некоторые крайние случаи, которые я не рассматривал;если вы найдете что-нибудь, напишите мне, и я исправлю этот ответ.
* Примечание. git rev-list --parents [...]
также возвращает хэш этого коммита.Я не исследовал почему, но если вы знаете, дайте мне знать!