Я попытался создать prepare-commit-msg
хук, который работает для merge commits. Скрипту передаются следующие аргументы .git/MERGE_MSG
, merge
.
Мне нужно получить хэш или имя ветки объединенного коммита (для обычного, не октопусного слияния). Я знаю, что могу сделать, git rev-parse MERGE_HEAD
чтобы получить хэш или name-rev --name-only MERGE_HEAD
получить имя ветки (если есть).
Однако, похоже, что это prepare-commit-msg
вызывается до создания MERGE_HEAD. Есть ли другой способ узнать, какой коммит был объединен, кроме разбора автоматически сгенерированного сообщения?
Я использую git 2.4.0.
решение1
В пользовательском драйвере слияния имя ветви, в которую выполняется слияние (назначение), можно получить с помощью git symbolic-ref HEAD
, а имя ветви, в которую выполняется слияние (источник), — из
GITHEAD_<SHA>
переменной среды,
Вот пример фрагмента скрипта:
# retrieve merged branch name from an env var GITHEAD_<sha>=<branchName>
# we cannot use a sym ref of MERGE_HEAD, as it doesn't yet exist
gitHead=$(env | grep GITHEAD) # e.g. GITHEAD_<sha>=release/1.43
# cut out everything up to the last "=" sign
source="${gitHead##*=}"
# retrieve base branch name from a sym ref of HEAD
branch=$(git symbolic-ref HEAD) # e.g. refs/heads/master
# cut out "refs/heads"
destination="${branch#refs/heads/}"
echo "Merging from $source into $destination"
Источник :Как получить имена веток в пользовательском драйвере слияния Git?.