(注意:最初发布此问题时,“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
分支,您需要切换到不同的分支来处理不同的更改。