git 合并另一个分支和 git pull remote 另一个分支之间的区别



考虑到我在master上,我的遥控器上有名为origin的远程分支develop,一切都是最新的,我已经运行了git fetch

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

pull 是获取 + 合并,并且您从远程 *跟踪分支显式合并, 所以即使没有提取也没有区别。

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

鉴于您指定的约束,并假设自您的git fetch以来没有人更改远程设备上的任何内容,唯一的区别是默认提交消息会有所不同。 一个会说merge branch 'origin/develop',另一个会说merge branch 'develop' of 'url'. 如果您提供或编写自己的合并消息,则根本没有可检测到的差异。

(生成的合并提交的哈希 ID 将取决于时间,因此如果您自己尝试此操作,您可能会得到两个不同的提交,除非您可以在一秒钟内同时执行这两个提交。 但是,未来提交的哈希 ID 实际上是无法预测的:您需要知道其中的内容,包括时间戳。

我会注意到origin/develop不是一个分支; 所以这个问题似乎更像是"git merge remote-tracking-ref 和 git pull remote 分支之间的区别"......

我想我们可以从简单但微不足道的事情开始:至少,默认提交消息会有所不同。 但你可能不在乎这个;大多数人几乎忽略了合并提交消息。

除此之外,问题归结为正在做出什么假设。

要假设命令是等效的,我们必须假设默认配置;因为某些配置设置会更改pull的功能。 (例如,可以将pull配置为变基本地更改而不是合并。

听起来您想假设您的本地跟踪引用和远程分支都指向同一个提交。 这通常是一个不确定的假设,因为即使你"刚刚做了一个fetch",这并不排除其他人在你执行下一个命令之前做一个push

也就是说,这并不重要。 这意味着,如果您进行合并,您最终可能会落后(如果有人碰巧在您获取后立即推送);而且做pull并不是更好,因为有人可能会在你pull后立即做push......因此,如果世界要得到你,你所做的任何事情都不能保证除了你当地拥有的东西之外,没有任何东西来自原产地。

事实上,我会说,如果你只是做了一个抓取,你最好做合并而不是拉取,因为拉取会做另一个没有太大实际区别的fetch

最新更新