1. ホーム
  2. git

[解決済み] git で特定のコミットを別のブランチに移動させるには?

2022-03-25 04:44:30

質問

状況を教えてください。

  • マスターはXにある
  • quickfix1 は X + 2 コミットです。

そのような

o-o-X (master HEAD)
     \
      q1a--q1b (quickfix1 HEAD)

その後、quickfix2に取り掛かったのですが、誤ってmasterではなくquickfix1をコピー元のブランチとして取ってしまいました。現在、quickfix2 は X + 2 コミット + 2 関連コミットになっています。

o-o-X (master HEAD)
     \
      q1a--q1b (quickfix1 HEAD)
              \
               q2a--q2b (quickfix2 HEAD)

ここで、quickfix2 を含むブランチから、quickfix1 に属する 2 つのコミットを削除したいのですが、どうすればいいですか?

      q2a'--q2b' (quickfix2 HEAD)
     /
o-o-X (master HEAD)
     \ 
      q1a--q1b (quickfix1 HEAD)

quickfix2のあるリビジョンからパッチを作成しようとしたのですが、パッチではコミット履歴が保存されないのです。コミット履歴を保存しつつ、quickfix1には変更のないブランチを残す方法はないでしょうか?

解決方法は?

の典型的なケースです。 rebase --onto :

 # let's go to current master (X, where quickfix2 should begin)
 git checkout master

 # replay every commit *after* quickfix1 up to quickfix2 HEAD.
 git rebase --onto master quickfix1 quickfix2 

ということは

o-o-X (master HEAD)
     \ 
      q1a--q1b (quickfix1 HEAD)
              \
               q2a--q2b (quickfix2 HEAD)

になります。

      q2a'--q2b' (new quickfix2 HEAD)
     /
o-o-X (master HEAD)
     \ 
      q1a--q1b (quickfix1 HEAD)

この作業は、クリーンな作業ツリーで行うのが最適です。
参照 git config --global rebase.autostash true 、特に Git 2.10 以降 .