Ответ 1
Я добавил несколько комментариев, но важно здесь, что в крюке с предварительной фиксацией коммит, который вы собираетесь тестировать, еще не существует, поэтому вы не можете считать своих родителей.
Вот что вы делаете:
-
Если вы используете
git commit --amend
для изменения фиксации слияния, крюк предварительной фиксации запускается как обычно, но он не может действительно обнаружить, что это происходит. Новый коммит будет слиянием, но вы не можете сказать. -
Если вы используете обычный старый
git commit
для создания фиксации без объединения, файлMERGE_HEAD
не будет существовать в каталоге git, и вы можете сказать, что это не собирается создавать слияние. -
Если вы используете
git commit
, чтобы завершить конфликтное слияние, будет существовать файлMERGE_HEAD
, и вы можете сказать, что это создаст фиксацию слияния. -
Если вы используете
git merge
, и он успешно выполняется самостоятельно, он совершает новый коммит без использования привязки pre-commit, поэтому вы даже не вызываете его здесь.
Следовательно, если вы хотите разрешить git commit --amend
при слиянии с пропуском, вы можете приблизиться к тому, что хотите: просто проверьте наличие $GIT_DIR/MERGE_HEAD
, чтобы увидеть, является ли это git commit
, который заканчивается от конфликта конфликта. (Использование $GIT_DIR
- это трюк, чтобы сделать эту работу даже в том случае, если команды выполняются за пределами дерева git. git устанавливает $GIT_DIR
, чтобы команды на крюке git работали правильно.)