3

他の誰かがこの質問をより適切に言い換えることができますが、ここで私がやりたいことは次のとおりです。

私は長命のメジャー リファクタリング ブランチ B に取り組んできました。私は定期的にマスターをマージしてきましたが、今ではブランチ B はマスターよりも約 200 コミ​​ット進んでいます。プル リクエストを送信する準備ができましたが、コミット履歴を少し整理したいと思います。基本的に、200 件までのすべてのコミットを 3 つのコミットにまとめたいと考えています。

  • コミット 1 = 削除されたすべてのファイル
  • コミット 2 = 新しく追加されたすべてのファイル
  • コミット 3 = 他のすべて、つまり移動/編集されたすべてのファイル

そして、私がそれを台無しにしないように、私自身のブランチ B とは別のブランチでこの履歴の書き換えを行い、そのブランチをプルリクエストとして送信したいと思います。

gitでこれを達成する最も簡単な方法は何ですか?

4

2 に答える 2

3

にマージしようとしていると仮定しましょうmaster:

  1. 新しいブランチを作成してチェックアウトします。

    git checkout -b going-to-squash
    
  2. マスターにリベース

    git rebase --squash master
    
  3. master ブランチにリセットする

    git reset master
    
  4. これで、押しつぶされたブランチ全体がコミットされていない状態になります。

    今すぐ新しいコミットを作成してください。

    このステップには GUI を使用しますが、コマンド ラインで完全に実行できます。

于 2012-10-04T06:05:04.480 に答える
1

A git rebase --interactivePro Gitの本で説明されているように)は、コミット(コミットの一部ではない)を選択または押しつぶすことができるため、実用的ではありません。

別の方法は、巨大なパッチ(のようなgit format-patch origin/master)を生成し、そのファイルを解析して3つのパッチファイルを作成することです。

  • すべての削除を含む1つ
  • すべてが追加されたもの
  • 残り

次に、開始されたコミットからブランチを作成し(「 Gitブランチの開始コミットbranch Bの参照」を参照)、これら3つのパッチを適用できます。

于 2012-10-04T05:58:33.533 に答える