似乎我可以从远程存储库中的分支拉出或推送到我正在处理的分支。如果是这样,那么远程跟踪分支的目的是什么?
是否仅仅是为了检查分支并查看其外观?看起来远程跟踪分支就像是远程分支的镜像。
仅供参考:我对git很新,但已阅读并重新阅读了许多教程,但我仍然不清楚这一点!
谢谢!
答案 0 :(得分:7)
你是对的 - 远程分支确实镜像了远程存储库中的分支。
远程分支和远程跟踪分支都用于引用refs/remotes/<remote-name>/<branch-name>
形式的分支,例如,为origin/master
。 (请注意,这有时会与跟踪远程分支的分支的概念混淆,例如,您的主分支与origin / master关联。术语很不幸,但我们确实存在。)
远程跟踪分支的目的是记住远程存储库中分支的最后已知位置。这是git pull
工作所必需的;它从远程(原始主分支)上的分支获取,将其存储在远程跟踪分支(origin/master
)中,然后在本地合并。提交只能在本地创建,合并只能在工作树中完成,所以这是完全必要的!
如您所述,远程跟踪分支对于检查远程存储库中发生的情况也很有用。默认情况下,远程分支的所有都有远程分支,因此您可以轻松地使用git remote update [--prune] <remote>
或git fetch <remote>
来更新它们,然后将它们检出并与它们一起玩你喜欢。请注意,您可以执行除了检查之外的事情 - 您可以对它们进行区分(git diff origin/master
),找出您不支持的提交源(git log master..origin/master
)或您喜欢的任何其他内容。由于所有历史考试都是本地考试,因此必须有远程分支供您使用。
由于git push
会影响远程分支,因此它会自然更新远程跟踪分支;改变原点的主人然后假装它仍然处于旧位置直到你拿到它是不是很聪明!但它实际上并不依赖于远程跟踪分支。 (如果您将push.default
设置为跟踪,则 将使用您的跟踪配置,例如主跟踪源的主控,以决定要推送的内容。但仍然不会实际上取决于远程跟踪分支。)