为什么每次创建新分支时我的本地 git 分支都会消失?



我已经几个月没有使用 Git 了。 我刚刚启动了一个新项目,有一件事困扰着我:每次我创建一个新分支时,已经存在的分支就会消失,就好像它被替换了一样。 我的意思是,当我做"git 分支"时,我什么都没有! 显然,我的"git 结帐"不起作用。 我什至没有我的分支了。只有当前的一个。

我已经工作的项目没有这个问题。

为什么?

这是正常的:您刚刚创建了一个新项目:

$ mkdir newproj
$ cd newproj
$ git init
Initialized empty Git repository in .../newproj

此时,不存在分支。 尽管如此,正如git status会告诉您的那样,您在master分支上:

$ git branch
$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
$ 

您可以使用git checkout -b切换到另一个分支:

$ git checkout -b xyz
Switched to a new branch 'xyz'

现在你仍然没有分支,但现在你在分支xyz,正如git status会告诉你的。

这种奇怪的状态是正常的,因为没有提交。 当没有提交时,就不能有分支,因为分支名称只包含某些现有提交的哈希 ID。 没有提交,则不能存在分支名称。

当你创建一个新的提交时,Git 会执行以下步骤(前几个不按任何特定的顺序;只有最后几个有实际顺序(:

  1. 收集您的姓名和电子邮件地址,以便在新提交中使用。
  2. 获取(您的计算机的想法(当前时间,以附加到您的姓名和电子邮件地址。
  3. 收集日志消息。
  4. 冻结索引的内容(索引是你构建新提交的地方:git add将文件从工作树复制到索引中(。
  5. 获取当前提交的哈希 ID(如果有当前提交(。 如果发生这种情况,还要获取要合并的任何提交的哈希 ID。
  6. 使用所有这些信息创建新提交。创建提交会为其分配哈希 ID,该 ID 是所有这些内容的加密校验和(您的姓名和电子邮件地址以及时间戳、日志消息、冻结树的哈希 ID 等(。
  7. 写入
  8. 通过写入新提交获得的哈希 ID。 此新提交的哈希 ID 将进入当前分支名称。 如果分支名称在此之前不存在,那么,现在它存在。

因此,直到您进行至少一次提交,您才能拥有任何分支名称。 但是,您仍然可以选择哪个分支名称是您当前的分支,即使该分支不存在:创建第一个提交将创建分支名称。

(一旦你至少有一个提交,你可以将任意数量的名称附加到一个提交。 如果您有多个提交,则可以将任意数量的名称附加到每个提交,尽管大多数提交不需要附加任何名称。 Git 通过从以后的提交向后工作来找到它们。 只有最后一个提交(分支的尖端(需要一个名称,以便 Git 可以在不先找到稍后提交的情况下找到它。

最新更新