Разберитесь с объединенным коммитом в хуке prepare-commit-msg

Разберитесь с объединенным коммитом в хуке prepare-commit-msg

Я попытался создать 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?.

Связанный контент