git merge another-branch和git pull remote another-branch之间的区别

6

假设我正在master分支上,并且我有一个远程分支develop在我的名为origin的远程仓库中,一切都是最新的,我已经运行了git fetch

现在git merge origin/developgit pull origin develop之间有什么区别吗?

3个回答

8

Pull 是一个 fetch + merge ,你明确地从一个远程 *已跟踪的分支进行合并,所以即使没有 fetch,也没有区别。

如果您给我一个 -1 ,请至少评论一下对我的答案有什么问题。


1
没有使用fetch命令会有差别,因为我正在与origin/develop合并,但是如果没有使用fetch命令,origin/develop的引用可能不是最新的。另一方面,git pull origin develop将始终与更新的origin/develop合并。 - Aram810
@Aram810 这就是答案所说的。 - undefined

4
考虑到您提供的限制条件,并且假设没有人在您运行git fetch之后更改了远程仓库,唯一的区别是默认的提交信息将不同。其中一个将显示merge branch 'origin/develop',而另一个则会显示merge branch 'develop' of 'url'。如果您提供或编写自己的合并消息,则根本没有可检测的区别。
(生成的合并提交的哈希ID取决于时间,因此,如果您自己尝试此操作,则可能会获得两个不同的提交,除非您可以在一秒钟内完成两次操作。但是,未来提交的哈希ID实际上是无法预测的:您需要知道它将包含哪些内容,包括时间戳。)

3
我想指出,origin/develop不是一个分支,所以这个问题更像是“git merge remote-tracking-ref和git pull remote branch之间的区别”...
我猜我们可以从简单但琐碎的事情开始:默认提交消息将不同。但你可能不关心这个;大多数人基本上忽略合并提交消息。
除此之外,问题归结为做出了什么样的假设。
假设这些命令是等效的,我们必须假设一个默认配置;因为一些配置设置会改变pull的行为。(例如,pull可以被配置为重新定位本地更改而不是合并。)
听起来像是你想假设你的本地跟踪引用和远程分支都指向相同的提交。这通常是一个不太可靠的假设,因为即使你“刚刚做了一个fetch”,也不能排除其他人在你执行下一个命令之前做了一个push
话虽如此,这并不是真正重要的。这意味着,如果你进行合并,你可能会落后(如果有人恰好在你的fetch之后推送);而且做一个pull也没有什么好处,因为有人可能在你的pull之后做一个push...所以如果世界想要伤害你,你所做的任何事情都不能保证没有比你本地更多的东西在origin中。
事实上,我认为如果你刚刚做了一个fetch,你最好做合并而不是pull,因为pull将做另一个fetch,这在实际上没有太大的区别。

origin/develop 是一个分支。你只是明确地说第一个 / 后面的部分在名为 origin 的远程上。截图:https://imgur.com/a/osR4UAD - MrKekson
@MrKekson: 不,这不是一个分支。它是一个远程跟踪引用,与分支不同。如果你认为它是分支,请尝试git checkout origin/develop,看看是否会进入分离头状态。(顺便说一下,不确定为什么你认为你的截图有关...) - Mark Adelsberger
1
这涉及到定义“分支”的问题:请参见https://dev59.com/xV8f5IYBdhLWcg3wEPIq。如果您将“分支”定义为“`refs/heads/`中的名称”,则远程跟踪名称不是分支。如果您将其定义为由分支名称标识的提交字符串,则`refs/heads/master`也不是分支! - torek
1
@torek - 不确定你是回复我们中的哪一个;但是就记录而言,我认为分支最有用的定义是“可以检出的引用,并且在这样做后可以进行提交以自动推进引用”,这似乎是git文档使用的定义... 在我看来,这几乎相当于“在refs/heads/内部”。 - Mark Adelsberger
其实两者都有。一个是关于如何让Git执行 X的问题(对于某个X),另一个是关于我们如何谈论执行X的问题。当我们使用词语Y时,我们指的是什么?我们如何在个人之间沟通想法?这些哲学问题或者非常有趣,或者完全无意义,这取决于您的观点。但如果我们涉及到观点问题,嗯,还是只有我感到孤立无援吗? :-) - torek
@torek - 嗯,我尽量不将我的语言学思考应用于技术事务,因为对技术术语的规定性方法似乎是有必要的。 (当我在进行房屋布线时,我不想成为那个决定常见用法重新定义了什么电压的人……) 是的,人们使用分支来表示像“提交路径”或“类似于分支的引用”的东西;而我花了很多时间打字回答并断言他们弄错了…… - Mark Adelsberger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接