【问题标题】:Why my local git branch disappear everytime i create a new one?为什么每次我创建一个新分支时我的本地 git 分支都会消失?
【发布时间】:2018-10-17 19:45:21
【问题描述】:

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

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

这是为什么呢?

【问题讨论】:

  • 听起来你的 git 存储库已经损坏了,你能检查一下 .git/refs/heads 文件夹的内容吗?
  • 确保你把分支名称拼写成准确,也就是说,不要在git checkout Master 中使用大写的 M. git 在 WINdows 上可能会漏掉通过,但它不会完全正确,并且由于 git 区分大小写,可能会出现各种问题。

标签: git branch git-branch


【解决方案1】:

这很正常:你刚刚创建了一个新项目:

$ 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 会告诉你。

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

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

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

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

(一旦你至少有一个提交,你可以在一个提交中附加任意数量的名称。如果你有多个提交,你可以附加任意数量的名称喜欢每个提交,尽管大多数提交不需要任何名。Git通过从以后的提交向后工作来找到它们。只有last 提交——分支的提示——永远需要一个名称,以便 Git 可以找到它,而无需先找到以后的提交。)

【讨论】:

  • 好吧!我想我过去总是在“git init”之后提交一些东西,然后再创建一个新分支。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
相关资源
最近更新 更多