“结帐”后丢失最近的文件

时间:2020-04-20 15:54:38

标签: git pycharm checkout

我对文件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的图形界面。如何找回文件?

2 个答案:

答案 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