根据我的理解,无论何时运行git fetch
,都会在本地下载远程对象,并创建一个名为FETCH_HEAD
的轻量级指针到远程分支的HEAD
提交。
由于分支只是一个指针,这与创建本地分支有什么不同?什么设计考虑因素支持在使用git fetch
时不创建本地分支的情况?
看看这个条目What does FETCH_HEAD in Git mean?。
由于分支只是一个指针,这与创建本地分支有什么不同?有什么设计考虑因素支持在使用git fetch时不创建本地分支的情况?
因为git fetch
旨在遣返已知远程分支和相关缺失对象的状态。这与具有同源本地分支不同,在本例中,可能将其配置为跟踪其远程同源物。
实际上,分支通常被配置为自动创建本地分支,但只有在您首先使用git checkout
检查它们时才会这样。
git fetch
实际上可以在本地创建一些新的分支,但不是你的。对于每个新的分支,它创建一个远程跟踪分支,一个远程状态的图像,您无法与您的本地分支交互,git branch
上列出的分支。
如果自上次获取后在遥控器上创建了一些新的分支,git将获得所有需要的祖先的新引用。
示例:
在你当地的回购
A---B---C---D <<< master, origin/master
在远程“起源”,已完成工作(一个新的分支,并且master
已经提前)
A---B---C---D---G <<< master
\
\
E---F <<< new-feature
如果你在这一点上获取,你将得到一个新的参考new-feature
(你可以用git branch -r
验证),并且origin/master
将更新为指向G,但不是master
,它仍将保持不变。
G <<< origin/master
/
/
A---B---C---D <<< master
\
\
E---F <<< origin/new-feature
然后,它还允许您在决定是否以及如何将它们集成到本地工作之前检查这些新更改。