(注意:最初发布此问题时,“master”是 Git 中分支的默认名称。由于“main”现在是默认名称,因此此答案已更新为使用“main”,希望这将是对于刚接触 Git 的人来说更自然。)
这里实际上有三件事:origin main是两件不同的事情,并且origin/main是一件事。一共三件事。
两个分支:
main是本地分支
origin/main是一个远程跟踪分支(它是远程“origin”上名为“main”的分支的本地副本)
一个遥控器:
起源/主要远程?
origin/main分店是本地的!任何时候您从 获取origin,origin/main都会得到更新。但是,origin/main可能已过时,甚至可能main不再存在于origin. 如果远程跟踪分支被删除,您可以使用--prune选项 ( -p)git fetch自动删除远程跟踪分支。
origin/main分支不是main指向分支的引用或指针origin。它是本地副本。
示例:分两步拉
由于origin/main是一个分支,你可以合并它。这是两个步骤的拉动:
第一步,main从远程获取origin。将获取main分支origin并命名本地副本origin/main。
git fetch origin main
然后你合并origin/main到main.
git merge origin/main
然后您可以将您的新更改推main回origin:
git push origin main
更多示例
您可以按名称获取多个分支...
git fetch origin main stable oldstable
您可以合并多个分支...
git merge origin/main hotfix-2275 hotfix-2276 hotfix-2290
你能用不同的名字吗?
main如果我不想,我的本地分支机构不必命名。它不必与远程分支同名!假设我想命名我的分支alice,但仍然让它跟踪origin/main:
我可以很容易地做到这一点:
git checkout -b alice --track origin/main
可以看到本地分支是命名alice的,但是远程分支是命名main的,而本地副本是origin/main。这完全没问题!这可能有点令人困惑,但也许您已经有一个名为的不同main分支,您需要切换到不同的分支来处理不同的更改。