Короткий ответ
Если там написано
Patch failed at 0001 commit message for F
Затем запустите
$ head -1 .git/rebase-apply/0001
From ad1c7739c1152502229e3f2ab759ec5323988326 Mon Sep 17 00:00:00 2001
Чтобы получить SHA ad1c77
неудачного коммита, а затем используйте git show ad1c77
, чтобы взглянуть на него.
Длинный ответ
Давайте начнем с этого дерева:
A---B---C---D
\
E---F---G
$ git checkout G
$ git rebase D
Когда возникает конфликт перебазирования, это конфликт между
- восходящие изменения (
C--D
) от общего предка (B
) PLUS уже отмененные изменения и уже разрешенный конфликт (E'
) против
- патч следующего коммита (
F
)
Посмотрим, что получится:
1) A---B---C---D---E' <- E patched and committed successfully as E'
2) A---B---C---D---E'--- <- failed to patch F onto E'
Вот сообщение об ошибке:
First, rewinding head to replay your work on top of it...
Applying: commit message for F
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging 1.txt
CONFLICT (content): Merge conflict in 1.txt
Failed to merge in the changes.
Patch failed at 0001 commit message for F
Во-первых, вы можете видеть, что это было F
, потому что появляется сообщение о коммите. Однако, если все ваши сообщения коммита выглядят как «foo», «документация» или «некоторые исправления», то это не поможет, и вам действительно нужен идентификатор SHA ad1c77
или содержимое патча.
Вот как узнать настоящую личность F
:
Когда он перечисляет конфликт rebase, он говорит что-то вроде:
Patch failed at 0001 commit message for F
Теперь посмотрите в .git/rebase-apply/
, где вы найдете файл патча 0001
:
$ ls .git/rebase-apply
0001 head-name msg orig-head sign
0002 info msg-clean patch threeway
apply-opt keep next quiet utf8
final-commit last onto rebasing
Файл патча включает в себя оригинальный идентификатор фиксации
$ head -1 .git/rebase-apply/0001
From ad1c7739c1152502229e3f2ab759ec5323988326 Mon Sep 17 00:00:00 2001
Вы можете посмотреть на это.
Должен быть более простой способ, но это работает.
Обратите внимание, что причиной неудачного патча может быть другой коммит (если вы перебазируете общий предок HEAD
и цель перебазирования). Найти этот коммит гораздо сложнее, хотя вы можете попробовать выполнить перебазирование в обратном направлении, чтобы найти его:
$ git checkout D
$ git rebase G