我是一名独立开发者,我刚刚开始使用Git和私有BitBucket存储库。我不清楚的一点是Merge与Rebase。
我经常在台式机和笔记本电脑之间切换,并且一直使用BB访问任一平台上的最新代码。我在加载最新提交的代码时一直在使用rebase,因为我认为它基本上清除了该平台(桌面或笔记本电脑)上的所有内容,并确保我拥有与BB相同的代码。那是对的吗?我什么时候应该使用merge这样的动作?
答案 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。