履歴に埋もれた Git コミットを分割するにはどうすればいいですか? 質問する

履歴に埋もれた Git コミットを分割するにはどうすればいいですか? 質問する

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

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

ベストアンサー1

コミットを分割するためのガイドがありますリベースマニュアルページ簡単にまとめると次のようになります。

  • ターゲットコミット (例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て、現在分割されたコミットの後のコミットの適用を続行します。

おすすめ記事