web-dev-qa-db-ja.com

Git:対話的にコミットの範囲をリベース

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にはこのような動作がありますか?ある場合、どのように使用できますか?

この投稿 を見ましたが、私の質問には答えられませんでした。

9
tcelferact

これらの3つのコミットを押しつぶすには、全体リポジトリの履歴を書き直す必要があります。つまり、これらのテストコミットが変更された後のコミットのすべてのコミットハッシュ。私の意見では、それを行う最も簡単な方法は次のとおりです。

  1. 一時的なブランチを作成し、64bd9e7を指すチェックアウトを作成します。
  2. 3つのコミットをまとめて潰します。
  3. メインブランチをチェックアウトし、64bd9e7の直後のコミットにリセットします。
  4. 一時的なブランチにリベースします
3
Rob

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

注:履歴の書き換えは高度な操作であるため、注意して行ってください。

Gitリベースチュートリアル

6
hspandher