我是一名独立开发者,最近开始使用私人 BitBucket 仓库和 Git。唯一让我困惑的是 Merge 和 Rebase。由于经常在台式机和笔记本电脑之间切换,我一直使用 BitBucket 来获取最新的代码。每当我加载最新提交的代码时,我都使用 Rebase,因为我认为它基本上会清除该平台(台式机或笔记本电脑)上的所有内容,并确保我拥有与提交到 BitBucket 的相同的代码。这样做正确吗?我何时应该使用 Merge?
rebase和merge是将你的分支与另一个分支更新的不同策略。 rebase会更改历史记录,使其回到两个分支开始分歧的点。而merge则不会更改历史记录,并可能创建一个新的提交以显示两个分支的合并。
此文档比较了rebase和merge。结论:使用rebase来处理未推送的更改以创建整洁的历史记录;否则使用merge。
更新:Linus在2009年写过关于此的文章,查看他对git rebase和merge的建议。结论:仅谨慎地重新设置自己的私有提交。如果您的提交已被推送,则不再进行rebase。
合并(merge)就像其名字所说的那样,它将两个开发分支合并为一个。因此,假设您有一个在提交M1处的主分支。然后您在笔记本电脑上工作并创建提交N。您还在桌面上工作并创建提交L:
N
/
M1-L
当您将 N 合并到 L 中时,您将合并变更并获得新的提交 M2。
N
/ \
M1-L-M2
M1-L-N'
N'和M2具有相同的内容,只是它们的历史记录看起来不同。
只要你一个人
这没有关系。 无论哪种方式,您都会有当前状态。
如果您在团队中
差异就变得重要了:
当您rebase
一个已经被其他人拉取的分支时,他可能会看到一些混乱的效果,因为他正在工作的分支突然包含完全不同的提交。
因此,您不希望重新设置已公开的内容。
另一方面,如果您有10个开发人员commit
并且merge
像地狱一样,历史记录会变得混乱,您可能更喜欢让开发人员在私有存储库上工作,然后再进行rebase
以便在push
到集成分支之前整理历史记录。