【问题标题】:Git Branches NOT Showing in "git branch" after Pull or Fetch but "git checkout" works ...?在拉取或获取之后,Git 分支未显示在“git 分支”中,但“git checkout”有效......?
【发布时间】:2018-03-17 19:09:34
【问题描述】:

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

$ git push origin branchname 

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

我后来去了机器B。我先做了一个

$ git pull origin master 

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

$ git checkout branchname 

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

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

这个传奇与THIS 类似,但我的分支实际上在那里,只是在我检查它们之前没有显示以下 git 分支命令。

【问题讨论】:

  • git branch -a 显示远程和本地分支,git branch 仅显示本地分支。在机器 B 中,branchnamegit checkout branchname 命令之前不作为本地分支存在。

标签: git version-control git-branch git-remote git-fetch


【解决方案1】:
$ 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

【讨论】:

  • 谢谢萨吉布。我做过这些实验,但你的回答和 kowsky 的解释帮助我更好地理解了 git 在这个特定场景中的哲学。
  • 我使用 git 分支,它显示除活动分支名称(带有 * 符号)之外的所有分支名称。为什么?
  • 谢谢萨吉布。这对我来说很容易。
【解决方案2】:

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

所以是的,这是预期的行为。您可以查看它们,因为 git 可以识别远程分支并设置一个新的本地分支,该分支会自动设置为跟踪远程分支。

【讨论】:

  • 谢谢科斯基。我进一步的实验证实了你的解释。我只是不理解这个特定场景中的 git 哲学。现在说得通了。
猜你喜欢
  • 2021-02-26
  • 2019-03-15
  • 1970-01-01
  • 2011-04-26
  • 2020-05-13
  • 2017-12-23
  • 2012-04-26
  • 2017-11-25
相关资源
最近更新 更多