合并源/主节点的行为不符合预期

  • 本文关键字:不符合 节点 合并 git
  • 更新时间 :
  • 英文 :


我对在 git 中使用origin作为路径的一部分的理解是,您正在处理代码的服务器版本;因此(除了冲突等),我希望以下两组命令以相同的方式运行(假设我在 mytestbranch 中的分支,并从该分支开始签出):

git checkout master
git pull
git checkout mytestbranch
git merge master

而且更简洁:

git merge origin/master

但是,似乎源/主并不总是从服务器获取最新版本。 我是否误解了这是要做什么?

origin/<branch>仅包含自上次从中fetch以来的远程内容。

git pullgit fetch+git merge origin/<branch>相同(技术上,git merge FETCH_HEAD,请参阅此处):git fetch将使您的远程分支保持最新状态,git merge origin/master会将刚刚获取的更改合并到您的本地分支(我假设您在这里设置了远程跟踪分支)。

这里的关键是,只有当您执行git fetchgit push(或git pull,如前所述)时,您的存储库才会连接到远程。所有其他操作都在本地执行。

两个示例之间的另一个小区别是,与 master 不同的某个分支上的git merge origin/master将合并到该分支的最新获取的远程 master 更改中,但它不会更新您的本地主分支(您只能在当前签出时更新本地分支)。

顺便说一下,https://learngitbranching.js.org/?NODEMO 一个"图形化"了解遥控器和远程分支的好网站。官方 git 文档包含更全面的解释。

origin/master是一个远程跟踪分支。

它的工作是跟踪远程分支的状态,甚至是脱机状态。这意味着每次您要在真正的远程分支和用于表示它的图像(有问题的远程跟踪分支,origin/master)之间进行同步时,您必须显式地使用

git fetch

然后,git 将向您的远程发送请求,以获取所有分支的更新版本(如果有更新或新分支)。(检查文档)

最新更新