为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Git
鸿蒙传说 2019-10-14 10:15:40
情况:师父在Xquickfix1在X + 2次提交时这样: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中进行任何更改?
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

这是一个典型的案例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之后。


查看完整回答
反对 回复 2019-10-14
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

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

最好的方法可能是在master之外创建分支,然后在该分支中使用git cherry-pick所需的quickfix2的2次提交。


查看完整回答
反对 回复 2019-10-14
?
12345678_0001

TA贡献1802条经验 获得超5个赞

您可以做的最简单的事情就是挑选一个范围。它的功能与相同,rebase --onto但对眼睛更容易:)


git cherry-pick quickfix1..quickfix2


查看完整回答
反对 回复 2019-10-14
  • 3 回答
  • 0 关注
  • 507 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信