Git和合并提交

Git和合并提交,git,Git,我有几个提交,其中一些与类似的任务有关,例如: eedf6b3 Task A (Continue) 12364e5 Task D da77ed3 Task C 9e1991a Taks B (Continue) cb345c1 Task A (Continue) 83b1c27 Task B 9b3c83c Task A 我想把类似的任务合并成一个带有新注释的任务。 我遇到了“git rebase-I”,但出于某种原因,它没有(或我误解了它……)发挥作用。首先,要弄清楚术语: 不能合并提交,只

我有几个提交,其中一些与类似的任务有关,例如:

eedf6b3 Task A (Continue)
12364e5 Task D
da77ed3 Task C
9e1991a Taks B (Continue)
cb345c1 Task A (Continue)
83b1c27 Task B
9b3c83c Task A
我想把类似的任务合并成一个带有新注释的任务。
我遇到了“git rebase-I”,但出于某种原因,它没有(或我误解了它……)发挥作用。

首先,要弄清楚术语:

不能合并提交,只能合并分支

如果您有一个名为dev的分支,并且希望在主分支中有一些(而不是全部)提交,则必须使用cherry picking。 这意味着,您需要从dev分支向主分支进行一些提交

对于该检查,请使用master

git cherry-pick <commit>
git樱桃采摘

要进一步阅读,请参阅git rebase是一个非常强大的工具,因此在使用它时要小心通常,对共享提交(即您推送到GitHub或以其他方式与协作者共享的提交)重新设置基础不是一个好主意。

下面是如何使用
rebase-i
重新安排提交,假设提交从最早的底部到最新的顶部:

  • git-rebase-i头~7

    这会将您转储到默认的文本编辑器中,其中包含的缓冲区如下所示:

    pick 9b3c83c Task A
    pick 83b1c27 Task B
    pick cb345c1 Task A (Continue)
    pick 9e1991a Taks B (Continue)
    pick da77ed3 Task C
    pick 12364e5 Task D
    pick eedf6b3 Task A (Continue)
    
  • 首先,修改缓冲区,使提交按您想要的顺序进行。也就是说,剪切并粘贴,直到得到如下结果:

    pick 9b3c83c Task A
    pick cb345c1 Task A (Continue)
    pick eedf6b3 Task A (Continue)
    pick 83b1c27 Task B
    pick 9e1991a Taks B (Continue)
    pick da77ed3 Task C
    pick 12364e5 Task D
    
  • 现在,将作为上一次提交一部分的提交从
    pick
    更改为
    squash

    pick 9b3c83c Task A
    squash cb345c1 Task A (Continue)
    squash eedf6b3 Task A (Continue)
    pick 83b1c27 Task B
    squash 9e1991a Taks B (Continue)
    pick da77ed3 Task C
    pick 12364e5 Task D
    
  • 一旦您对所获得的内容感到满意,请保存文件并退出编辑器。Git将查看您保存的文件,并像您那样对提交重新排序,将标记为
    squash
    的文件压缩到上一次提交中

    这可能会导致冲突,但如果不同的任务很好地分开,它们就不应该是非常复杂的任务。只要像平常一样解决这些冲突。Git将提示您如何执行此操作


  • 是一个有用的参考。

    @zerkms所有的提交都在我的分支上,cp有什么帮助?你可以将它们提取到一个新的位置,挤压(使用rebase),然后做任何你想做的事情。