在 pull 中,你会 select 在 rebase 和 merge 方法之间选择什么?

What would you select between rebase and merge methods in pull?

我用过SmartGit! 我知道 rebasemerge 之间的区别,但我听说 rebase 被归类为 troubleshooting 操作,它是不建议日常使用。所以 SmartGit 改为推荐该方法。你会 select 什么?

经验法则:

  • 如果您已经发布了要变基或合并的提交,并且未指定数量的用户已经将它们放入他们的私有存储库克隆中,那么合并是唯一的选择。

  • 如果你还没有发布它们,或者你可以要求所有远程用户重新获取 rebased 提交,这对他们来说不会是一个大的干扰,那么你可以 rebase。

  • 实际上,为了保持未发布提交的历史清晰明了,您应该 对它们进行变基。如果例如你在之前的 unpublished 提交中发现错误,你应该重置到损坏的提交,修改它,然后将链的其余部分 rebase 到新的固定提交上。

理由:

在 git 和 [一些] 其他 DVCS 父项中,提交是不可分割的 属性 提交。因此,如果 parent 属性 被更改,这将产生一个全新的提交,即使它与原始提交具有相同的源代码树。这同样适用于 "amended commits"(至少在修改期间更改了提交时间)。

如果一个人发布了一些提交,这些提交可以被其他存储库用户用于他们的衍生作品。已经发布的变基提交要求所有其他用户反过来必须将他们的作品变基到新版本的提交上。当然,这会让您的同事的生活更加艰难,如果没有可行的论据,我不会推荐这种方法。

另一方面,在本地更改链中进行不必要的合并会使事情变得复杂,回购历史很快就会变得一团糟。这就是为什么 rebase 是 re-organize/re-order 一组未发布的提交的推荐方法。