git rebase
をしていたら謎現象に当たったのでメモ書き
以下のようなコミット履歴があったとします。
aaaaaa: A
bbbbbb: B
cccccc: C
git rebase -i aaaaaa^
で aaaaaa
を edit
にして保存します。その後 aaaaaa
で作業を反映し git rebase --continue
をすると当然 TODO は次の状態になります。
bbbbbb: B
cccccc: C
B, C は pick
なので通常なら何事もなく commit されて終了なはずですが、なぜか bbbbbb
がすでに反映されている状態で更に追加しようとしました (なぜ?)
error: could not lock '.git/MERGE_MSG': File exists
error: could not apply bbbbbb... B
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
hint: Could not execute the todo command
hint:
hint: pick bbbbbb... B
hint:
hint: It has been rescheduled; To edit the command before continuing, please
hint: edit the todo list first:
hint:
hint: git rebase --edit-todo
hint: git rebase --continue
すでに反映されているので当然ファイル重複にはなっているのでこのコミットは必要ありません。なぜか git rebase --skip
は使えなかったので git rebase --edit-todo
で TODO を開き bbbbbb
の行を削除します。cccccc
でも同様の現象が起きたため同じ対処をします。
これにより意図通りに aaaaaa
のみを編集できました。