git - 执行 git fetch 后使用 git 签出分支是否仍然转到原点?
问题描述
如果我使用本地存储库设置了远程服务器,并且我第一次执行 git fetch,如果有 10 个远程分支,那么我现在将拥有 10 个远程跟踪分支。
从我还收集到的信息中,这些远程跟踪分支是指向这些远程分支的指针,而不是这些分支上代码的实际完整本地副本……对吗?
然后我的跟进是,如果我要在 git fetch 之后检查这些远程分支之一,git 是否仍然需要连接到远程以获取所有代码,或者它是否会简单地切换到本地机器上已经存在的远程跟踪分支有所有的代码吗?
解决方案
从我还收集到的信息中,这些远程跟踪分支是指向这些远程分支的指针,而不是这些分支上代码的实际完整本地副本……对吗?
不,这是不正确的。
Git 分支只是一个名称和一个提交 ID。远程分支没有什么特别之处,只是你不承诺它们。
当您获取时,您会下载每个提交的完整副本。每个提交都知道哪个提交在它之前(或者在合并的情况下,两个或更多提交)。这就是“历史”。Git 在存储和传输该历史记录方面非常有效。
然后我的后续行动是,如果我要在 git fetch 之后检查这些远程分支之一,git 是否仍然需要连接到远程以获取所有代码,或者它是否会简单地切换到本地机器上已经存在的远程跟踪分支有所有的代码吗?
Git 已经拥有存储库的完整副本。当你git checkout origin/main
Git 切换到 origin/main 指向的已下载提交时。
只有少数几个 Git 命令可以进行任何网络访问。主要的是git push
, git fetch
and git pull
(这只是一个提取+一个合并)。