【问题标题】:How to see and go to local branches in git?如何在 git 中查看和访问本地分支?
【发布时间】:2018-05-08 05:15:07
【问题描述】:

我刚刚创建了一个全新的 git 存储库:

git init

通过执行

git status

我已经确定我在 master 分支。输出的第一行是:

On branch master

作为第一步,我想创建一个分支并进入那里。我了解到只需一个命令即可完成这两个步骤:

git checkout -b aaa

我这样创建了一个名为“aaa”的分支并去了那里。我可以用“git status”确认它(它告诉我“在分支 aaa”)。现在我想回到“master”分支。所以,我执行:

git checkout master

结果我得到:

error: pathspec 'master' did not match any file(s) known to git.

那么,我如何去 git 中的另一个(现有)分支?而且,我什至不知道存在哪些分支。如何查看现有分支的列表?

【问题讨论】:

  • git branch -a 向您展示了什么?
  • 什么也没显示。

标签: git git-branch git-checkout


【解决方案1】:

你在master 分支中没有提交,所以master 实际上并不存在。

创建并结帐本地master 分支:

$ git checkout -b master

你可以看到分支列表:

$ git branch       # see local branch(es)
$ git branch -r    # see remote branch(es)
$ git branch -a    # see all local & remote branch(es) 

进行更改,git add -Agit commit -m 'message'。所以,现在这个提交实际上指向了master 分支。

注意 git init 命令的默认分支是 master(它不是真正的分支,只是默认的 git 约定)。然后在不做任何提交的情况下签出到aaa 分支。因此,master 消失了,因为没有任何提交历史记录就不存在分支。

【讨论】:

  • 但是“master”分支存在。然后我创建并切换到分支“aaa”。你的意思是master分支因此而消失了?无论如何,我已经执行了“git checkout -b master”,因此,我在 master 分支中,但“git branch”没有显示任何内容。所以我猜分支“aaa”现在已经消失了。对吗?
  • 是的,因为您的 masteraaa 实际上没有提交。做一个提交然后那个分支就已经存在了。
  • @Roman 你还没有任何提交,所以事情变得复杂了。 Sajib 的回答对我来说基本正确。
  • 这不直观。就像我在文件系统上创建了一个文件夹,而我的操作系统决定在我离开后立即删除一个空文件夹(因为它是空的)。
  • @Roman 我同意那个,一开始似乎有点反直觉
【解决方案2】:

git branch 将向您显示您的本地分支机构,并带有 * 以显示您的活跃分支

git branch --all 包含上游跟踪分支

添加-vv 非常详细的开关也很有用以获得更多信息

与 Sajib 的回答有关,git 中的分支只是对提交链的叶提交的引用。这可以通过git show-ref显示出来

例如

$ git show-ref
134d0c9e480ed26a4f8867215aa9e36ac8563d93 refs/heads/master
134d0c9e480ed26a4f8867215aa9e36ac8563d93 refs/remotes/origin/HEAD
134d0c9e480ed26a4f8867215aa9e36ac8563d93 refs/remotes/origin/master

在这种情况下,HEAD、origin/master 和 master 都引用了我本地存储库中的同一个提交。

正如 Sajib 建议的那样,没有提交就没有引用,因此存储库中没有实际的分支

如果您在运行 git checkout -b aaa 后进行第一次提交,那么您的存储库中唯一的具体分支将是 aaa,然后您可以使用 git branch -m master 将其重命名为 master,其中 -m 是 move

【讨论】:

  • 您建议的所有三个命令都没有产生任何输出。
  • 添加了一些关于参考我的答案的信息
【解决方案3】:

回答为什么你的分支在你离开后看不到:

在 git 中,分支只是一组提交和一个指向分支 HEAD 所在位置的指针。由于您的初始分支“master”没有提交,因此 HEAD 指向 void 并且 git 似乎只解释指向某些东西的指针。

我鼓励您阅读解释 git 内部结构的文档。这将帮助您了解幕后发生的事情,并帮助您轻松回答自己的问题:

https://git-scm.com/book/en/v1/Git-Branching-What-a-Branch-Is

Git 中的分支只是指向其中一个提交的轻量级可移动指针。 Git 中的默认分支名称是 master。当您最初进行提交时,您将获得一个指向您所做的最后一次提交的主分支。每次提交时,它都会自动前进。

如果你创建一个新分支会发生什么?好吧,这样做会创建一个新的 指针让你四处走动。假设您创建了一个新分支 称为测试。您可以使用 git branch 命令执行此操作:

PS Git 提供了对文件系统的抽象,因此您无法真正查看分支,因为它们是文件夹或文件。

【讨论】:

  • 感谢您的解释。分支的概念可能是 git-beginner 将面临的第一个概念。遗憾的是,即使是第一个概念,你也需要理解诸如“头”、“指针”之类的东西。
【解决方案4】:

在阅读了您的问题和评论后,您是说您已经拥有 Master 分支,但不知何故,当您点击时它现在没有显示 git 分支 请点击 git fetch 获取远程分支。

为了进一步参考和更多关于 git 的学习,你可以玩这个有趣的游戏 https://try.github.io/levels/1/challenges/1 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-02
    • 2020-03-25
    • 2019-07-17
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多