远程跟踪分支和远程分支有什么区别?

8
似乎我可以从正在工作的分支中拉取或推送到远程存储库上的分支。如果是这样,那么远程跟踪分支的目的是什么呢?
它是否仅仅用于检出该分支以查看其外观?似乎远程跟踪分支就像是一面反射远程分支的镜子。
FYI:我对git非常陌生,但已阅读并重复阅读了许多教程,但我仍然对此无法理解!
谢谢!
1个回答

8
你说得对 - 远程分支确实反映了远程存储库中的分支。
远程分支和远程跟踪分支都用于引用形式为refs/remotes/<remote-name>/<branch-name>的分支,例如报告为origin/master。(请注意,这有时与跟踪远程分支的分支的概念混淆在一起,例如,你的主分支与origin/master相关联。术语不幸,但我们还是这样做了。)
远程跟踪分支的目的是记住远程存储库中分支的最后已知位置。这是必要的,以便git pull工作;它从远程(origin的主分支)获取分支,将其存储在远程跟踪分支(origin/master)中,然后在本地合并。提交只能在本地创建,合并只能在工作树中完成,因此这是完全必要的!
正如你提到的那样,远程跟踪分支也很有用,可以检查远程存储库中正在进行的操作。默认情况下,所有远程分支都有远程分支,因此你可以轻松使用git remote update [--prune] <remote>git fetch <remote>来更新它们,然后按照需要检出并使用它们。请注意,你可以做除了检出之外的其他事情 - 你可以与它们进行差异比较(git diff origin/master),找出origin拥有但你没有的提交(git log master..origin/master),或者任何你喜欢的其他操作。由于所有历史记录的检查都是本地的,因此必须存在远程分支才能使用它们。
由于git push会影响远程中的分支,因此它自然会更新你的远程跟踪分支;如果更改了origin的主分支,然后假装它仍处于旧位置直到你获取它,那将不太智能!但它实际上并不依赖于远程跟踪分支。(如果将push.default设置为跟踪,则会使用你的跟踪配置(例如,主分支跟踪origin的主分支)来决定要推送什么。但它仍然实际上不依赖于远程跟踪分支。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接