5

我是一名独立开发人员,刚刚开始使用带有私有 BitBucket 存储库的 Git。我不清楚的一件事是 Merge 与 Rebase。

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

4

2 回答 2

7

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

另请参阅有关 rebase 与合并的文档。底线:使用 rebase 进行未推送的更改以创建整洁的历史记录;否则使用合并。

更新: Linus 在 2009 年写过这篇文章,请参阅他关于 git rebase 和 merge 的建议。底线:谨慎地仅对您自己的私人内容进行变基。如果您的提交已被推送,则不再进行变基。

于 2013-07-27T11:50:01.520 回答
4

merge 顾名思义,它将两个开发分支合二为一。所以假设你在提交 M1 有一个主分支。然后您在笔记本上工作并创建提交 N。您还可以在桌面上工作并创建提交 L:

   N
  /
M1-L

当您将 N 合并到 L 时,您会合并更改并获得新的提交 M2

   N
  / \
M1-L-M2

这会保留所做的所有更改,但是您会得到这些小的双重路径,这可能会变得非常混乱,尤其是当您有很多更改时。

然后是变基。从相同的情况开始,rebase 会采用提交 N 或 L 中的一个,并假装它是在另一个之后进行的。这导致新的提交 n'

M1-L-N'

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

只要你一个人
,没关系。您将拥有两种方式的当前状态

如果你在一个团队
中 差异变得很重要:

当您rebase的分支已经被其他人拉取时,他可能会看到一些令人困惑的效果,因为他正在处理的分支突然包含完全不同的提交。
所以你不想改变公开的东西。

另一方面,如果你有 10 名开发人员commitmerge那么历史就会变得混乱,你可能更喜欢让开发人员在私有存储库上工作,然后再到rebase集成push分支。

于 2013-07-27T11:52:31.740 回答