Лично мне бы не понравилось это соглашение: каждое слияние с мастером или разработкой, которое вы пробуете локально, приведет к развертыванию, и я бы предпочел сделать развертывание кода активным решением - нет места, чтобы попытаться объединить что-то безразвернуть его.(Кроме того, я точно не знаю о поведении Heroku, но я был бы удивлен, если бы оно переместилось при отправке коммита на реф, который не изменил бы этот реф.) Наконец, часто слияние, выполняемое вытягиванием, не будетБыстрая перемотка вперед, поэтому будет новая версия кода для развертывания.
Однако, если вы действительно хотите это сделать, вы можете сделать следующее в скрипте:
UPSTREAM=$(git rev-parse --symbolic-full-name @{u})
Это даст вам ветку удаленного отслеживания, которая представляет собой восходящую ветку от вашей текущей ветки - в хуке после слияния ваша текущая ветвь - та, в которую вы только что слились.(Эта хорошая команда взята из комментария Кевина Балларда к этому ответу .) Вы можете найти имя объекта (SHA1sum) этого коммита с помощью:
UPSTREAM_OBJECT_NAME=$(git rev-parse --verify $UPSTREAM)
Затем вы хотите узнатьесли этот коммит был одним из родителей HEAD - вы можете получить родителей с:
HEAD_PARENTS=$(git log -n 1 --pretty=format:"%P")
... так что вы можете проверить, был ли один из родителей выше по течению с:
git log -n 1 --pretty=format:"%P" | grep -q $UPSTREAM_OBJECT_NAME
Наконец, вы должны проверить первую строку reflog на наличие ветки удаленного отслеживания, чтобы убедиться, что она последний раз обновлялась посредством извлечения.Другими словами, содержит ли строка:
git reflog show -n 1 $UPSTREAM
... содержание pull : fast-forward
.
Это должно дать вам кусочки, необходимые для post-merge
сценария нужного вам типа,Повторим, однако, я действительно не хотел бы этого;)