我对在 git 中使用origin
作为路径的一部分的理解是,您正在处理代码的服务器版本;因此(除了冲突等),我希望以下两组命令以相同的方式运行(假设我在 mytestbranch 中的分支,并从该分支开始签出):
git checkout master
git pull
git checkout mytestbranch
git merge master
而且更简洁:
git merge origin/master
但是,似乎源/主并不总是从服务器获取最新版本。 我是否误解了这是要做什么?
origin/<branch>
仅包含自上次从中fetch
以来的远程内容。
git pull
与git fetch
+git merge origin/<branch>
相同(技术上,git merge FETCH_HEAD
,请参阅此处):git fetch
将使您的远程分支保持最新状态,git merge origin/master
会将刚刚获取的更改合并到您的本地分支(我假设您在这里设置了远程跟踪分支)。
这里的关键是,只有当您执行git fetch
或git push
(或git pull
,如前所述)时,您的存储库才会连接到远程。所有其他操作都在本地执行。
两个示例之间的另一个小区别是,与 master 不同的某个分支上的git merge origin/master
将合并到该分支的最新获取的远程 master 更改中,但它不会更新您的本地主分支(您只能在当前签出时更新本地分支)。
顺便说一下,https://learngitbranching.js.org/?NODEMO 一个"图形化"了解遥控器和远程分支的好网站。官方 git 文档包含更全面的解释。
origin/master
是一个远程跟踪分支。
它的工作是跟踪远程分支的状态,甚至是脱机状态。这意味着每次您要在真正的远程分支和用于表示它的图像(有问题的远程跟踪分支,origin/master
)之间进行同步时,您必须显式地使用
git fetch
然后,git 将向您的远程发送请求,以获取所有分支的更新版本(如果有更新或新分支)。(检查文档)