1. ホーム
  2. git

[解決済み] Git 一連のコミットを対話的にリベースする

2022-02-18 20:15:53

質問

私は、以下のことを試みています。 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にこのような動作はありますか?あるとすれば、どのように使えばいいのでしょうか?

を拝見させていただきました。 この記事 しかし、私の質問には答えてくれませんでした。

どのように解決するのですか?

この三つのコミットを潰すには、まず最初に 全体 リポジトリです。つまり、これらのテストコミット以降のコミットのハッシュがすべて変更されることになります。私が思うに、これを行う最も素直な方法は、次のとおりです。

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