rebase -i
私の歴史の中でしばらく前に発生したいくつかのコミット。次のようなログがあるとします。
* 5e32fb0 (HEAD -> master) Add latest feature
* 106c31a Add new feature
* 2bdac33 Add great feature
...100 other commits...
* 64bd9e7 Add test 3
* 3e1066e Add test 2
* 26c612d Add test 1
* 694bdda Initialize repo
3つのテストコミットを押しつぶしたいと思います。これらの状況では、git rebase -i HEAD~106
はあまり実用的ではありません。代わりに私が探しているのはgit rebase -i 64bd9e7:26c612d
。
Gitにはこのような動作がありますか?ある場合、どのように使用できますか?
この投稿 を見ましたが、私の質問には答えられませんでした。
これらの3つのコミットを押しつぶすには、全体リポジトリの履歴を書き直す必要があります。つまり、これらのテストコミットが変更された後のコミットのすべてのコミットハッシュ。私の意見では、それを行う最も簡単な方法は次のとおりです。
64bd9e7
を指すチェックアウトを作成します。64bd9e7
の直後のコミットにリセットします。rebase -i
を使用して、それらのコミットのみをスカッシュします。
git rebase -i <main_branch>
# Now just add `s` in front of all the commits you want to squash
コミットが多い場合は、rebase --onto
を確認することをお勧めします-
git rebase --onto <final_base_commit> <initial_base_commit> <head>
git rebase --onto 694bdda 64bd9e7 5e32fb0
注:履歴の書き換えは高度な操作であるため、注意して行ってください。