簡體   English   中英

如何移動某些提交基於git中的另一個分支?

[英]How to move certain commits to be based on another branch in git?

情況:

  • 主人在X.
  • quickfix1是在X + 2提交

這樣:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM