Ответ 1
Краткий ответ
Если он говорит
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 id ad1c77
или содержимое патча.
Здесь, как узнать реальное тождество F
:
Когда он перечисляет конфликт переустановки, он скажет что-то вроде:
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