Git for solo developer:merge vs rebase

时间:2013-07-27 11:39:44

标签: git

我是一名独立开发者,我刚刚开始使用Git和私有BitBucket存储库。我不清楚的一点是Merge与Rebase。

我经常在台式机和笔记本电脑之间切换,并且一直使用BB访问任一平台上的最新代码。我在加载最新提交的代码时一直在使用rebase,因为我认为它基本上清除了该平台(桌面或笔记本电脑)上的所有内容,并确保我拥有与BB相同的代码。那是对的吗?我什么时候应该使用merge这样的动作?

2 个答案:

答案 0 :(得分:5)

rebase 合并是将您的分支机构更新为另一个分支的不同策略。 rebase 会将历史记录更改为两个分支开始分歧的点。另一方面,合并不会改变历史记录,可能会创建一个新的提交来显示两个分支的合并。

另请参阅有关rebase vs merge的this document。底线:使用rebase进行未按下的更改以创建整洁的历史记录;否则使用合并。

更新: Linus在2009年写到了这一点,请参阅his advice on git rebase and merge。一句话:谨慎使用自己的私人物品。如果您的提交已被推送,则不再进行更改。

答案 1 :(得分:3)

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。