git pull VS git fetch git rebase

mic*_*ael 286 git git-pull git-rebase git-fetch

另外一个问题说,git pull就像是一个git fetch+ git merge.

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

Cas*_*bel 333

你的问题应该很明显,你实际上只是在询问git merge和之间的区别git rebase.

所以让我们假设你处于常见的情况 - 你已经在你的主分支上完成了一些工作,你从原点开始,也做了一些工作.获取后,事情看起来像这样:

- o - o - o - H - A - B - C (master)
               \
                P - Q - R (origin/master)
Run Code Online (Sandbox Code Playgroud)

如果你在这一点上合并(git pull的默认行为),假设没有任何冲突,你最终得到这个:

- o - o - o - H - A - B - C - X (master)
               \             /
                P - Q - R --- (origin/master)
Run Code Online (Sandbox Code Playgroud)

另一方面,如果你做了相应的rebase,你最终会得到这个:

- o - o - o - H - P - Q - R - A' - B' - C' (master)
                          |
                          (origin/master)
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,工作树的内容应该相同; 你刚刚创造了一个不同的历史导致它.rebase重写你的历史记录,使它看起来好像你已经在origin的新master分支(R)上提交,而不是你最初提交的地方(H).如果其他人已从主分支中撤出,则不应使用rebase方法.

最后,请注意,您可以git pull通过将config参数设置branch.<name>.rebase为true 来实际设置给定分支以使用rebase而不是merge .您也可以使用单次拉动来完成此操作git pull --rebase.

  • 如果你有人从你的主分支机构撤出后会发生变化,会发生什么?这会破坏回购吗? (39认同)
  • 如果你不确定某人*没有*,你应该假设他们有. (29认同)
  • 你怎么知道有人从主分支机构撤出了? (12认同)
  • 我只是在想,除非你也在推动原点/主人以外的其他地方进行更改,否则我不会遇到其他人已经解决了问题的问题,因为如果你已经将这些更改推到了原点/掌握,首先没有什么可以改变的.在我看来,警告真的只对你有什么比X - > origin/X更复杂的情况更重要,但我可能是错的.如果有人知道我忽视的情景,请分享. (4认同)

har*_*wla 5

TLDR:

git pull是喜欢跑步 git fetch,然后git merge
git pull --rebase就像git fetchgit rebase

为了回应您的第一句话,

git pull就像一个git fetch+ git merge

“在其默认模式下,git pull是git fetch后跟 git mergeFETCH_HEAD的简写形式。”更精确地讲,以给定的参数git pull运行git fetch,然后调用git merge以将检索到的分支头合并到当前分支中

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


对于第二个陈述/问题:

“但是git pullVS git fetch+和有什么区别?git rebase

同样,来自同一来源:
git pull --rebase

“使用--rebase,它将运行git rebase而不是git merge。”


现在,如果你想问

mergerebase” 之间的区别

也可以在这里回答:
https : //git-scm.com/book/en/v2/Git-Branching-Rebasing
(改变版本历史记录方式之间的区别)

  • 我想提一下,“git pull --rebase”大多数时候就像“git fetch then git rebase”——但并非总是如此。在某些情况下,“git pull --rebase”可以做更多的事情。请参阅此处经常引用的示例:https://gitolite.com/git-pull--rebase (3认同)