我对文件a.py进行了一些更改,并创建了两个新文件b.py和c.py,然后提交了更改,但收到警告:
The Git repository at the following path is in the detached HEAD state
我忽略了它,并且仍然做出了更改。我们将此提交称为提交X。
然后,我进行了结帐和转帐,a.py和b.py文件消失了,因此我对a.py所做的更改也消失了。现在,提交X不会显示在提交列表中。
我只有一个master分支,所以这不是因为我在另一个分支中。
我不了解Git,正在使用PyCharm的图形界面。如何找回文件?
答案 0 :(得分:2)
您处于分离的HEAD状态,这意味着您具有与此类似的状态,其中HEAD并未指向任何引用:
A <--master
|
B <--HEAD
|
C
然后,您添加了一些文件并将其提交,如下所示:
touch new_file.txt
git add new_file.txt
git commit -m "your detached HEAD commit"
那时,这就是你的树的样子:
master --> A
| D <--HEAD
| |
B /
|
C
由于D没有指向分支或其他引用(您是“分离的”),所以当您再次检出master时,git无法引用D,因此它是“丢失的”:
A <--master (HEAD)
|
B
|
C
要找到D,请使用git reflog
并查找如下内容:
0abce (HEAD -> master) HEAD@{0}: checkout: moving from b214e to master
b214e HEAD@{1}: commit: your detached HEAD commit
be14e
是您要查找的提交的名称,因此git checkout be14e
可以再次获得它(您也可以将git checkout
的文件直接保存到主文件中,但这是另一堂课):
master --> A
| D <--HEAD
| |
B /
|
C
现在,您可以查看丢失的文件。您可能应该在此时创建一个分支,以便在切换分支时文件不再丢失。 git checkout -b new_branch
也是这样:
master --> A
| D <--new_branch (HEAD)
| |
B /
|
C
答案 1 :(得分:0)
通常,您签出要处理的分支名称,例如:
git checkout master
git checkout develop
但是您也可以使用其SHA1哈希检出特定的提交:
git checkout 54e8cd9354
这样做时,您处于分离状态,这基本上意味着您的下一个提交不会添加到现有分支的末尾
您可以通过以下方式检查您的上一次提交:
git log -1