インタラクティブなリベースはあなたの友達です!
他の人が言ったように:
$ git rebase -i HEAD~5
...ここ-i
でインタラクティブフラグでありHEAD~5
、インタラクティブリベースに最後の5つのコミットを含めることを意味します。
上記を発行した結果としてエディターが起動したら、開いたファイルのコメントを見てください。
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
あなたにとって重要なのは、ここで行を削除すると、コミットが失われるということです。
そのため、削除したいコミットを参照する行を削除し、保存して閉じると、git が残りを処理します (コミットの性質と削除しようとしている復帰によっては、いくつかの競合を修正する必要がある場合があります)。 )。
あなたがすでにコードをプッシュし、他の人がそれをプルしている場合、あなたのブランチをチェックアウトした誰かが次にプッシュしたときにコミットがそこに戻ってくるため、上記の方法は機能しないことに注意することが重要です。インタラクティブなリベースは、コミットの記録がない範囲でコミットを削除するため、他のクローンはそれらが削除されたことを知りません。次にプッシュするとき、ローカル クローンは、削除したオブジェクト (コミット) がオリジンにないことを「確認」するため、それらを復元しようとします。