Git和合并提交

时间:2014-06-30 21:44:54

标签: 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',但由于某种原因它没有(或者我误解了它......)做了伎俩。

2 个答案:

答案 0 :(得分:4)

git rebase是一个非常强大的工具,因此在使用它时要小心。 rebase共享提交通常不是一个好主意(即您已推送到GitHub,或以其他方式与协作者共享)。

以下是使用rebase -i重新安排提交的方法,假设它们从最底层的最旧版本到顶部的最新版本:

  1. git rebase -i HEAD~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)
    
  2. 首先,修改缓冲区,使提交符合您想要的顺序。也就是说,剪切并粘贴,直到你得到类似的东西:

    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
    
  3. 现在,将之前提交的提交从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
    
  4. 一旦您对所拥有的内容感到满意,请保存文件并退出编辑器。 Git将查看您保存的文件并重新排序提交,将标记为squash的文件压缩到上一次提交中。

    这可能会导致冲突,但如果不同的任务分开,则不应该是非常复杂的任务。正常解决这些冲突。如果出现,Git会提示你如何做到这一点。

  5. Changing Multiple Commit Messages section of Pro Git是一个有用的参考。

答案 1 :(得分:0)

首先,要明确术语:

您无法合并提交,只能合并分支。

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

对于那个签出大师,然后使用

git cherry-pick <commit>

如需进一步阅读,请参阅manpage of git cherry-pick