【问题标题】:Why can't I see what branch I am in?为什么我看不到我在哪个分支?
【发布时间】:2018-05-08 04:46:33
【问题描述】:

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

git init

现在我想看看我在哪个分支。所以,我执行:

git branch

这个命令不输出任何东西(我的期望是我只会看到一个分支“master”并且我会在那里)。

所以,我猜根本没有分支。所以,我尝试通过以下方式创建一个分支:

git checkout -b aaa

结果我看到了:

Switched to a new branch 'aaa'

但是当我执行时

git branch

我再次没有输出。那么,如何验证我是否在特定分支中?

【问题讨论】:

  • 使用git statusgit branch 用于管理分支,而不是用于检查您当前的分支。
  • 在您进行第一次提交之前,某些 git 命令不会产生预期的输出。
  • 但是,据我记得,早些时候,当我使用另一个存储库时,“git branch”给了我一个现有分支的列表,“*”符号表示我所在的分支。跨度>
  • git branchgit branch --list 应该告诉你:git-scm.com/docs/git-branch

标签: git git-branch git-checkout


【解决方案1】:

您可以发送git status

第一行将是:On branch aaa

【讨论】:

    【解决方案2】:

    fr3dch3n's answer 是正确的——运行git status 会告诉你你在哪个分支上——但没有解决为什么git branch 根本没有显示任何东西。原因是你处于一种特殊的状态。

    您刚刚通过git init 创建了一个新的空存储库——一个根本没有提交的存储库。

    现在,关于 Git 中的分支名称的问题是它们总是——总是——指向一个特定的提交。但是你根本没有提交,那么像 masteraaa 这样的分支名称怎么能指向一个呢?

    答案是它不能,所以它没有,Git 通过尚未创建分支来实现这一点。很简单,你在一个不存在的分支上。

    当存储库是新的并且完全没有提交时,这种特殊状态必须发生,但如果您使用git checkout --orphan <newbranch>,也会发生这种情况。这会将您置于新分支上,而无需先创建该分支,因此新分支不存在。

    当一个分支不存在,但你在git status 术语中“打开”该分支,并且你运行git commit,Git 像往常一样创建一个新的提交,1 和在该过程结束时,Git 更新当前分支名称,以便它指向它刚刚进行的新提交。如果分支以前不存在,那么现在存在!

    因此,在一个新的空存储库中,您“打开”的分支不存在,而使用 git checkout -b 切换到另一个新分支会使您进入另一个仍然不存在的新分支。你上的那个不存在的分支,只是消失在空气中:它从来不存在,它只是你“在”上的一个幻影,现在你在一个新的和不同的幻影。

    (稍后git checkout --orphan <newbranch> 也会发生同样的事情:它会将您置于这种幽灵般不存在的分支上,如果您随后切换到不同的新分支,您将继续处于幽灵般不存在的分支上。假设git checkout 本身成功,运行git checkout master 或使用任何实际现有分支的名称将切换回现有分支。)


    1git commit 流程是这样工作的,尽管各个步骤的精确顺序有些变化,而像 git commit --only <files> 这样的选项会产生更大的变化。

    1. 确保提交看起来正常(执行任何所需的预提交测试,包括运行预提交挂钩)。
    2. 将当前索引内容转换为至少一个 tree 对象,制作索引中所有文件(“blob”)的快照。 (这是git write-tree 命令。)
    3. 将您的姓名、电子邮件和时间戳收集在一起作为“作者”,并再次作为“提交者”进行此提交。添加提交日志消息。
    4. 找出哪些提交是此提交的父提交。
    5. 制作新的提交对象 (git commit-tree)。
    6. 更新当前分支名称,使其指向新的提交。

    在这个特殊的“尚未创建的分支”条件下,实际创建分支的是第 6 步。

    请注意,在第 4 步“找出父母”中,Git 注意到同样的“尚未创建的分支”条件。这种情况的结果是新提交没有 no 父级:新提交是 root 提交。不过,通常第 4 步会读取HEAD,目的是查找当前提交的哈希 ID:HEAD 包含分支名称,并且该分支确实存在并包含当前提交哈希 ID。

    在解决来自git merge 的冲突后提交合并结果时,步骤 4 使用git merge 留下的跟踪文件来确定额外的父提交哈希(正常合并)或哈希(“章鱼”合并)。当前或 HEAD 或 @ 提交仍然像往常一样是第一个父项。

    【讨论】:

      【解决方案3】:

      使用git branch -a - 它会显示所有存在于本地仓库中的分支

      git status - 用更新的文件显示当前分支

      作为 Git 初学者,你应该看到这个Git learning game 它肯定会帮助你增加知识:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-12
        • 2018-05-28
        • 1970-01-01
        • 2021-07-21
        • 1970-01-01
        • 2011-06-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多