Git 分支在拉取或获取后未显示在 "git branch" 但 "git checkout" 有效...?

Git Branches NOT Showing in "git branch" after Pull or Fetch but "git checkout" works ...?

将我在新分支 branchname 上的最新工作提交到机器 A 上的本地 git 仓库后,我将该工作推送到我的 gitlab 远程仓库

$ git push origin branchname 

master 分支已经与远程仓库同步。所有分支都出现在我的 gitlab 列表的远程仓库中。

后来去了B机,先做了一个

$ git pull origin master 

并且 master 已更新,但是当我输入 git branch 时我的新 branchname 没有出现,历史树中也没有我新创建的另一个分支。我去了这个 post 并按照第一个答案的指示进行操作。另一个 'git branch' 仍然没有显示我的其他分支。一时兴起,我只是想做

$ git checkout branchname 

它就在那儿,检查得很好。 git branch 命令然后在我的分支列表中显示了 master 和 branchname。我对另一个分支做了同样的事情,然后在 git branch 命令后它也出现在分支列表中。

这种操作的 git 行为正常吗?我想知道的主要问题是,如果您从远程仓库拉取或获取以更新必须知道远程分支的先前知识的本地仓库,为什么它们不在 git branch 命令期间出现?而且,为什么我在 git branch 之后看不到它们?

这个故事类似于 THIS 一个,但我的分支实际上在那里,只是在我检查它们之前不会显示以下 git 分支命令。

git branch,不带任何参数,只显示本地分支。当您 fetch 时,有关您的远程分支的信息会更新,但只有在您使用 git branch -r(仅远程分支)或如@SajibKhan 所建议的那样,git branch -a(所有远程分支)时才会显示和当地分支机构)。

所以是的,这是有意为之的行为。您可以检查它们,因为 git 识别远程分支并设置一个自动设置为跟踪远程分支的新本地分支。

$ git branch     # only local branches
* master

在机器 B 中,branchnamegit checkout branchname 命令之前不作为本地分支存在,因此列表仅显示 master.

$ git fetch
$ git checkout branchname
$ git branch
  master
* branchname

查看所有远程和本地分支。

$ git branch -a   # remote and local branches
$ git branch -r   # remote branches only

注:这里,git checkout branchname其实是找到了一个名为branchname的本地分支。如果找到,则只需结帐到该分支,但如果未找到,则它会在远程分支列表中搜索(例如 origin/branchname )。如果找到,则创建一个与 origin/branchname 具有相同历史记录的本地分支 branchname