4

Я попытался создать ловушку prepare-commit-msg которая работает для коммитов слияния. Скрипт получает следующие аргументы .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 ответ1

7

В пользовательском драйвере слияния имя ветви, сливаемой в (место назначения), можно получить с помощью 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-драйвере слияния? ,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .