(注意:最初发布此问题时,“master”是 Git 中分支的默认名称。由于“main”现在是默认名称,因此此答案已更新为使用“ main”,希望这对 Git 新手来说更自然。)
这里实际上有三件事:origin main 是两个独立的东西,origin/main 是一件事。总共三件事。
两个分支:
-
main 是本地分支
-
origin/main 是一个远程跟踪分支(它是远程“origin”上名为“main”的分支的本地副本)
一个遥控器:
origin/main 是远程的吗?
origin/main 分支是本地的!任何时候您从origin 获取,origin/main 都会得到更新。但是,origin/main 可能已过时,main 甚至可能不再存在于 origin 上。如果远程跟踪分支被删除,您可以使用--prune 选项 (-p) 和 git fetch 自动删除远程跟踪分支。
origin/main 分支不是对origin 上的main 分支的引用或指针。这是一个本地副本。
示例:分两步拉
由于origin/main是一个分支,你可以合并它。这里有两个步骤:
第一步,从远程origin获取main。将获取origin 上的main 分支,并将本地副本命名为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 的不同 分支,您需要切换到不同的分支来处理不同的更改。