我正在研究我的项目并做了一些提交。在那之后我陷入了一个问题所以我做了git checkout 2y72aa
并做了很多改变,最后进行了git add .
和git commit
。
但现在,当我执行git status
时,它向我展示HEAD detached from 2y72aa
,其中2y72aa
提交是我的旧提交而不是最新的提交。
我如何实施我的变更并转移最新的变化?
请注意,该项目非常重要,因此我不希望永久删除任何内容。
HEAD分离只是意味着您的工作副本指向没有分支的提交。发生这种情况是因为你对提交哈希进行了git checkout
。
要将master
分支重置为当前提交,请执行以下命令(来自here):
git branch my-temporary-work
git checkout master
git merge my-temporary-work
git checkout master
git merge my-temporary-work
这将使您脱离分离的HEAD模式,并在master分支上进行更改。
没有必要担心数据丢失,因为没有发生任何不好的事情 - “分离的头部”警告的措辞是为了使情况显得可怕,以便提醒用户采取行动。
您创建的提交没有任何问题,它不会很快消失。您可以在其上创建其他提交。如果您将散列(或其多个字符)写入例如一张纸,您将可以稍后结账。您可以切换到另一个分支,并通过ID切换git cherry-pick
。但是,提交是未命名的:没有分支(或其他命名引用,如标记)导致提交。这意味着如果丢失提交ID,您将无法轻松检索它。这也意味着,如果有足够的时间 - 大约一个月 - 提交将被回收。
要“修复”问题,只需使用git checkout -b branch-name
从提交创建一个分支。从那时起,提交将在您创建的分支上,您可以照常管理。
当您使用其哈希(2y72aa)检出提交时,您已转移到分离头模式。
它基本上意味着没有指向此哈希的分支。
Git允许您检查历史记录中的任何提交,但在分离头模式下,您无法提交新的更改。
如果您想继续处理某些历史性提交,则需要在那里创建一个分支。
git branch <branch name>
这将允许您提交新的更改。
如果您之前正在使用功能分支,并希望返回到2y72aa,则应将分支重置为此提交,而不是仅仅将其检出。