状況:
そのような:
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
それから私はquickfix2の作業を始めましたが、偶然にもマスターではなくコピーするソースブランチとして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以降 。
git cherry-pick
を使用して、コピーしたいコミットを選ぶことができます。
おそらく最良の方法はmasterからブランチを作成することです、そしてそのブランチであなたが望むquickfix2からの2つのコミットにgit cherry-pick
を使用してください。
あなたができる最も簡単なことはチェリーの範囲を選ぶことです。これはrebase --onto
と同じですが、目には簡単です:)
git cherry-pick quickfix1..quickfix2
私はそれが信じます:
git checkout master
git checkout -b good_quickfix2
git cherry-pick quickfix2^
git cherry-pick quickfix2