297

私は自分の歴史をこぼしたので、それにいくつかの変更を加えたいと思っています。問題は、関連のない 2 つの変更を含むコミットがあり、このコミットがローカル (プッシュされていない) 履歴の他の変更に囲まれていることです。

このコミットをプッシュする前に分割したいのですが、私が見ているガイドのほとんどは、最新のコミットまたはコミットされていないローカル変更の分割に関係しています。それ以来、私のコミットを「やり直す」必要なく、歴史に少し埋もれているコミットに対してこれを行うことは可能ですか?

4

6 に答える 6

454

リベースのマンページにコミットを分割するためのガイドがあります。簡単な要約は次のとおりです。

  • 対象のコミット (例: ) を含むインタラクティブなリベースを実行し、git rebase -i <commit-to-split>^ branch編集対象としてマークします。

  • リベースがそのコミットに到達したら、使用git reset HEAD^してコミット前にリセットしますが、作業ツリーはそのままにしておきます。

  • 変更を段階的に追加してコミットし、必要な数だけコミットします。add -p特定のファイルの変更の一部のみを追加するのに役立ちます。commit -c ORIG_HEAD特定のコミットに対して元のコミット メッセージを再利用する場合に使用します。

  • コミットしているものをテストしたい場合 (良い考えです!) を使用git stashして、コミットしていない部分 (またはstash --keep-indexコミットする前に) を非表示にし、テストgit stash popしてから、残りを作業ツリーに戻します。すべての変更がコミットされるまで、つまり作業ツリーがきれいになるまで、コミットを続けます。

  • 実行git rebase --continueして、現在分割されているコミットの後にコミットを適用します。

于 2010-11-29T19:14:53.997 に答える
-2

まだプッシュしていない場合は、そのまま使用してgit rebaseください。さらに良いことに、git rebase -iコミットをインタラクティブに移動するために使用します。問題のあるコミットを前面に移動してから、必要に応じて分割し、パッチを背面に移動できます (必要な場合)。

于 2010-11-29T19:11:36.280 に答える