Git post-merge hook, как получить имя объединенной ветки

Я пытаюсь создать скрипт ловушки после слияния, который запускается только при слиянии из определенной ветки. Как я могу определить имя ветки, из которой произошли изменения для конкретной фиксации?

e.g.

if $from_specific_branch == 1 then 

git diff --name-status HEAD@{1} HEAD "some_folder" | 
   while read st file; do
      #skip deleted
      if [ "$st" == 'D' ]; then continue; fi

      # .. do something with those files
   end

person romanlv    schedule 31.08.2011    source источник


Ответы (3)


Во-первых, стоит отметить, что вы можете объединять любой коммит с текущим коммитом — на самом деле он не обязательно должен быть на какой-либо ветке.

Когда вы создаете слияние, я считаю, что первый родитель (HEAD^1) всегда является ветвью, в которой вы находились при слиянии. Итак, вы можете посмотреть на HEAD^2 (и, возможно, HEAD^3, HEAD^4 в случае слияния осьминога) и проверить, находятся ли они на определенных ветвях.

Чтобы проверить, находится ли HEAD^2 в ветке foo, вы можете проверить, совпадает ли git merge-base HEAD^2 foo с git rev-parse --verify HEAD^2.

person Mark Longair    schedule 31.08.2011

Вы можете просто использовать $GIT_REFLOG_ACTION в своем хуке. Он содержит текст, например, слияние имя_ветки, имя_ветки или название исходной ветки или так далее.

person Vasil Kulakov    schedule 09.06.2015

Ну, вы можете использовать git branch --contains <commit> для вывода списка всех ветвей; не уверен, что выполнит именно то, что вы хотите, поскольку в нем будут перечислены любые ветки, содержащие эту фиксацию, но предполагая, что вы объединяете новую фиксацию, это может помочь...

person johnny    schedule 31.08.2011