2010-07-28 189 views
257

Another question表示git pull就像是git fetch + git mergegit pull VS git fetch git rebase

但是git pull VS git fetch + git rebase有什么区别?

+2

(改变方式的版本历史记录,什么不可以的区别)有人要收拾的链接...而且我有多少票,其他的问题得到了惊奇 – xenoterracide 2010-07-28 20:33:15

+11

@xeno:我认为它只是有多少人去数到“我有这个问题太” – bobobobo 2010-07-28 21:10:17

+34

有一天我我会抽出时间来真正阅读git文档,但在那之前,我会将这些类型的问题添加到我的投票 – 2012-09-18 16:03:56

回答

292

从你的问题中应该很明显你实际上只是询问git mergegit rebase之间的差异。

因此,让我们假设你在通常情况下是 - 你做你的主分支的一些工作,并从产地的,也做了一些工作拉。在获取之后,事情是这样的:

- o - o - o - H - A - B - C (master) 
       \ 
       P - Q - R (origin/master) 

如果合并在这一点上(GIT拉的默认行为),假设没有任何冲突,你结束了这一点:

- o - o - o - H - A - B - C - X (master) 
       \   /
       P - Q - R --- (origin/master) 

如果在另一方面,你做了适当的底垫中,你会落得这样的:

- o - o - o - H - P - Q - R - A' - B' - C' (master) 
          | 
          (origin/master) 

你的工作树应该结束了同在这两种情况下的内容;你刚刚创建了一个不同的历史导致它。底垫重写你的历史,使它看起来就好像你在起源的新的主分支(R)的顶部犯,而不是您最初提交(H)。如果其他人已经从你的主分支中拉出,你永远不应该使用rebase方法。

最后,请注意,通过将配置参数branch.<name>.rebase设置为true,您实际上可以为给定分支设置git pull以使用rebase而不是merge。您也可以使用git pull --rebase单拉做到这一点。

+37

Wha如果在某人已经从你的主分支中拉出后重新分配资金,那么情况会发生吗?这会打破回购? – 2011-03-22 06:36:06

+11

你如何知道是否有人从你的主分支中拉出来? – Frank 2012-08-07 05:47:23

+27

如果你不确定某人*没有*,你应该假设他们有。 – 2013-02-11 06:20:10

0

在回答你的第一个声明“git的拉就像一个git取+ git的合并。”,

‘在默认模式下,git的拉动是简写形式,git的取指,然后 混帐合并FETCH_HEAD’更准确地说,混帐拉运行混帐与 给定参数提取和调用git的合并来合并检索分支 头进当前的分支”

(参考文献:https://git-scm.com/docs/git-pull


对于你的第二个声明/问题:'但正是VS混帐混帐拉之间的差额提取+ git的重订' 再次,从同一来源:

“有了--rebase,它运行git的变基,而不是git的合并。“现在


,如果你要问取和合并的区别,那就是这里太回答: https://git-scm.com/book/en/v2/Git-Branching-Rebasing

相关问题