[英]How to move certain commits to be based on another branch in git?
情況:
這樣:
o-o-X (master HEAD)
\
q1a--q1b (quickfix1 HEAD)
然后我開始研究quickfix2,但不小心將quickfix1作為源分支進行復制,而不是master。 現在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
的經典案例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創建分支,然后在該分支中使用git cherry-pick
來自你想要的quickfix2的2次提交。
你可以做的最簡單的事情是挑選一個范圍。 它與rebase --onto
一樣,但對眼睛來說更容易:)
git cherry-pick quickfix1..quickfix2
我相信它是:
git checkout master
git checkout -b good_quickfix2
git cherry-pick quickfix2^
git cherry-pick quickfix2
我發現的唯一工作方式:
git show>~/some_file.txt
git checkout master
git checkout -b new_branch
git apply -stat ~/some_file.txt
git apply -check ~/some_file.txt
git apply ~/some_file.txt
然后你需要再次提交更改,但手動操作要容易得多......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.