独立开发者的Git:合并 vs 变基

5
我是一名独立开发者,最近开始使用私人 BitBucket 仓库和 Git。唯一让我困惑的是 Merge 和 Rebase。由于经常在台式机和笔记本电脑之间切换,我一直使用 BitBucket 来获取最新的代码。每当我加载最新提交的代码时,我都使用 Rebase,因为我认为它基本上会清除该平台(台式机或笔记本电脑)上的所有内容,并确保我拥有与提交到 BitBucket 的相同的代码。这样做正确吗?我何时应该使用 Merge?

不太明白你所说的“我认为它基本上清除了平台上的所有内容(桌面或笔记本电脑),并确保我拥有与提交到BB相同的代码”的意思是什么? - Max Komarychev
基本上,当我拉取并变基时,我认为它会将硬盘驱动器上的文件更新为BB上的版本。但是合并操作是否有所不同? - mraviator
5
如果你想有效地使用Git,我强烈推荐免费在线Pro Git书籍,特别是第1-3章和第6-6.5章。 - user456814
好棒的杯子蛋糕!谢谢。 - mraviator
请查看这个答案。 - Abdullah Khan
2个回答

7

rebasemerge是将你的分支与另一个分支更新的不同策略。 rebase会更改历史记录,使其回到两个分支开始分歧的点。而merge则不会更改历史记录,并可能创建一个新的提交以显示两个分支的合并。

此文档比较了rebase和merge。结论:使用rebase来处理未推送的更改以创建整洁的历史记录;否则使用merge。

更新:Linus在2009年写过关于此的文章,查看他对git rebase和merge的建议。结论:仅谨慎地重新设置自己的私有提交。如果您的提交已被推送,则不再进行rebase。


4

合并(merge)就像其名字所说的那样,它将两个开发分支合并为一个。因此,假设您有一个在提交M1处的主分支。然后您在笔记本电脑上工作并创建提交N。您还在桌面上工作并创建提交L:

   N
  /
M1-L

当您将 N 合并到 L 中时,您将合并变更并获得新的提交 M2。

   N
  / \
M1-L-M2

这将保留所有更改,但会得到这些小的双路径,特别是当您有很多这样的路径时,可能会变得非常混乱。
然后就有了rebase。从相同的情况开始,rebase获取提交N或L中的一个,并假装它是在另一个之后进行的。这将导致一个新的提交n'。
M1-L-N'

N'和M2具有相同的内容,只是它们的历史记录看起来不同。

只要你一个人
这没有关系。 无论哪种方式,您都会有当前状态。

如果您在团队中
差异就变得重要了:

当您rebase一个已经被其他人拉取的分支时,他可能会看到一些混乱的效果,因为他正在工作的分支突然包含完全不同的提交。
因此,您不希望重新设置已公开的内容。

另一方面,如果您有10个开发人员commit并且merge像地狱一样,历史记录会变得混乱,您可能更喜欢让开发人员在私有存储库上工作,然后再进行rebase以便在push到集成分支之前整理历史记录。


1
非常好的解释!这让我明白了很多,谢谢! - mraviator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接