1. ホーム
  2. ギット

[解決済み】履歴に埋もれてしまったGitコミットを分割する方法は?

2022-03-31 18:15:32

質問

履歴を書き換えてしまったので、変更を加えたいのですが、どうすればいいですか?問題は、2つの無関係な変更を含むコミットがあり、このコミットはローカルの(プッシュされていない)履歴で他のいくつかの変更に囲まれていることです。

このコミットをプッシュする前に分割したいのですが、私が見ているガイドのほとんどは、直近のコミットや、コミットされていないローカルの変更を分割することに関係しています。歴史に埋もれてしまったコミットに対して、それ以降のコミットを "re-do" することなくこれを実行することは可能でしょうか?

解決方法は?

コミットを分割するためのガイドがあります。 rebaseのマニュアルページで . 簡単にまとめると

  • 対象のコミットを含むインタラクティブなリベースを実行する (例. 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 を実行すると、分割されたコミット以降のコミットの適用が進みます。