考虑我在master
,我的远程分支develop
位于名为origin
的远程分支上,所有内容都是最新的,我已经运行git fetch
。
现在git merge origin/develop
和git pull origin develop
之间有什么区别吗?
答案 0 :(得分:2)
考虑到您指定的约束,并假设自您的git fetch
以来没有人在远程上更改任何内容,唯一的区别是默认的提交消息会有所不同。一个人会说merge branch 'origin/develop'
而另一个会说merge branch 'develop' of 'url'
。如果您提供或编写自己的合并消息,则根本没有可检测到的差异。
(生成的合并提交的哈希ID将取决于时间所以如果您自己尝试这样做,您可能会得到两个不同的提交,除非您可以在一秒钟内完成两个提交。但是,有效地无法预测未来提交的哈希ID:您需要知道其中的内容,包括时间戳。)
答案 1 :(得分:1)
我会注意到origin/develop
不是分支;所以问题似乎更像是#34; git merge remote-tracking-ref和git pull remote branch" ...
我想我们可以从简单但微不足道的开始:至少,默认提交消息将是不同的。但你可能并不关心这一点;大多数人都忽略了合并提交消息。
除此之外,问题归结为假设正在做出什么。
假设命令是等效的,我们必须假设一个默认配置;因为某些配置设置会更改pull
的功能。 (例如,pull
可以配置为重新定义本地更改而不是合并。)
它听起来就像你想假设你的本地跟踪引用和远程分支都指向同一个提交。这通常是一个不确定的假设,因为即使你只是做了fetch
",这并不妨碍其他人做push
之前做pull
你的下一个命令。
那就是说,它并不真正重要。所有这一切都意味着,如果你进行合并,你可能会落后(如果有人在你的获取后碰巧推进);并且它不像做push
更好,因为有人可能会在pull
之后立即fetch
...所以,如果有世界想要得到你,你所做的一切都不能保证除了你在当地之外没有任何东西。
事实上,我说如果你刚刚进行了一次抓取,那么你最好不要进行合并而不是拉动,因为拉动会做另一个SelectedValuePath
而不是; t带来很大的实际差异。
答案 2 :(得分:-1)
Pull是一个fetch + merge,你明确地从一个远程*跟踪的分支合并, 所以没有区别,即使没有获取。
如果你给我一个-1,至少要评论你的答案是什么问题