首页 文章

如何将某些提交移动到基于git中的另一个分支?

提问于
浏览
325

情况:

  • master在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?

5 回答

  • 132

    你能做的最简单的事就是挑选一个范围 . 它与_383361相同,但对眼睛来说更容易:)

    git cherry-pick quickfix1..quickfix2
    
  • 321

    我相信它是:

    git checkout master
    git checkout -b good_quickfix2
    git cherry-pick quickfix2^
    git cherry-pick quickfix2
    
  • 115

    这是 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)
    

    最好在干净的工作树上完成 .
    See git config --global rebase.autostash true,尤其是after Git 2.10 .

  • -3

    我发现的唯一工作方式:

    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
    

    然后你需要再次提交更改,但手动操作要容易得多......

  • 24

    您可以使用 git cherry-pick 来选择要复制的提交 .

    可能最好的方法是从master创建分支,然后在该分支中使用 git cherry-pick 来自你想要的quickfix2的2次提交 .

相关问题