短い答え
それが言うなら
Patch failed at 0001 commit message for F
次に実行します
$ head -1 .git/rebase-apply/0001
From ad1c7739c1152502229e3f2ab759ec5323988326 Mon Sep 17 00:00:00 2001
ad1c77
失敗したコミットのSHAを取得し、それを確認するために使用git show ad1c77
します。
長い答え
このツリーから始めましょう:
A---B---C---D
\
E---F---G
$ git checkout G
$ git rebase D
リベースの競合が発生すると、それは
C--D
共通の祖先からのアップストリームの変更( )( B
)に加えて、すでにリベースされた変更とすでに解決された競合(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」、「documentation」、または「somefixes」のように見える場合、これは役に立ちません。SHAIDad1c77
またはパッチの内容が本当に必要です。
の本当のアイデンティティを見つける方法は次の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
パッチファイルには、元のcommit-idが含まれています
$ head -1 .git/rebase-apply/0001
From ad1c7739c1152502229e3f2ab759ec5323988326 Mon Sep 17 00:00:00 2001
その後、それを見ることができます。
もっと簡単な方法があるはずですが、これはうまくいきます。
パッチが失敗したという事実は、別のコミットが原因である可能性があることに注意してください(共通の祖先HEAD
とリベースターゲットにリベースしている場合)。そのコミットを見つけることはかなり複雑ですが、逆にリベースを実行して見つけることができます。
$ git checkout D
$ git rebase G