为什么git fetch不创建本地分支?

时间:2019-04-29 19:52:57

标签: git git-branch git-fetch

据我了解,每次运行git fetch时,都会在本地下载远程对象,并且会创建一个名为FETCH_HEAD的轻量级指针,指向远程分支的HEAD提交。

由于分支仅仅是指针,因此与创建本地分支有何不同?有哪些设计考虑因素支持使用git fetch时不创建本地分支的情况?

2 个答案:

答案 0 :(得分:1)

查看此条目What does FETCH_HEAD in Git mean?

  

由于分支仅仅是指针,因此与创建本地分支有何不同?有哪些设计考虑因素支持使用git fetch时不创建本地分支的情况?

因为git fetch的目的是收回已知远程分支和关联的丢失对象的状态。这与拥有同源本地分支不同,后者在这种情况下可能被配置为跟踪其远程同源。

分支通常被配置为确实自动创建该本地分支,但是只有在您首先使用git checkout将其检出后才可以。

答案 1 :(得分:0)

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

然后,它还允许您在 之前检查这些新更改,以确定是否以及如何将它们集成到本地工作中。