我从来没有能够对这个问题得到明确答案。
很长一段时间,在同事的建议下,我一直这样做:
git fetch origin
git pull origin <mybranch>
我被告知(并且已经看到)git pull
如果你没有先行git fetch
,行为不一样。你没有得到任何远程更改。
但我在网上看到的是git pull
相当于git fetch
后跟git merge
。如果确实如此,git pull
将包含git fetch
,我首先不需要明确的git fetch
,对吗?但事实似乎并非如此。
所以我正在寻找的是一些描述观察到的git pull
行为的明确文档。 (我知道我可能也会提出很多建议来切换到git fetch
→git merge
;这也很好,但我对{{1}非常感兴趣}。)
答案 0 :(得分:14)
我们应该把它作为副本关闭,但在此之前,让我看看是否可以挤进去。
虽然git pull
确实 git fetch
后跟git merge
(或git rebase
),但精确的区别在于在 git pull
如何运行git fetch
。
具体做法是:
$ git pull
或:
$ git pull remote-name branch-name
(或各种类似的变体),不是git fetch
,不是git fetch remote-name
,而是git fetch remote-name branch-name
。
git fetch origin master
与git fetch origin
或git fetch
不同 没有更新refs/remotes/origin/master
;这是一个早期的 设计决定保持远程跟踪分支的更新 可预测,但实际上,人们发现它更多 每当我们有一个时,便于机会性地更新它们 机会,当我们运行git push
时,我们一直在更新它们 已经破坏了原有的可预测性&#34;反正。
换句话说,如果git pull
决定运行git fetch origin master
,这将更新您的存储库中的origin/master
- 但只有在您没有运行Git的古老版本时 比如某些未命名的Linux发行版中包含的那些。
如果您运行git fetch origin
,您将更新所有远程跟踪分支(前提是您有合理的配置,即使在所述古老版本的Git中也是默认配置)。如果您运行git fetch origin master
,则只会更新origin/master
,并且只有在您的Git过于荒谬时才会更新。由于git pull
运行四字变体,因此它只更新一个甚至没有远程跟踪分支。
答案 1 :(得分:2)
我被告知(并且已经看到)如果你不首先进行git fetch,git pull的行为方式不一样。你没有得到任何远程更改。
通常情况下,这不是真的,而git pull会从遥控器中拉出状态。
是的!但我在网上看到的只是git pull相当于git fetch后跟git merge。如果这是真的,
引用git-pull
的手册页:
将来自远程存储库的更改合并到当前分支中。在默认模式下,git pull是git fetch的简写,后跟git merge FETCH_HEAD。
我认为可以解决它。
所以我正在寻找的是一些明确的文档
$ git help pull
答案 2 :(得分:0)
git pull是一个get get,后跟一个git merge。 (或者您可以使用--rebase选项进行rebase)。所以,你不需要做的事情就是去取得&#39; git fetch&#39;在&#39; git pull&#39;
之前输入&#39; git help fetch&#39;和&#39; git help pull&#39;用于描述
git fetch转到指定的存储库,获取被引用的对象(通常是提交),获取它及其所有依赖对象,并将其存储在指定的远程跟踪分支中。然后你可以从那里合并或改组。 &#39; git merge origin / master&#39;或者您可以使用&#39; git checkout origin / master&#39;
查看它