Git 错误“致命:不明确的参数 'HEAD~':未知修订版本或路径不在工作树中。”

-1 git

我想从项目存储库中删除我的最后一次提交。但是当我运行 'git reset --soft HEAD^ ' 或 'git reset --hard HEAD^' 时,

它显示“致命:不明确的参数“HEAD〜”:未知修订版或路径不在工作树中。使用“--”将路径与修订版分开,如下所示:“git [...] -- [...]”

有什么问题?

tor*_*rek 6

问题很简单:此时,您的存储库中只有一个提交,1 soHEAD~或\xe2\x80\x94,它在当前提交之前HEAD^命名该提交,\xe2\x80\x94 没有提交名称。您无法将当前分支名称移回一次提交,因为没有先前的提交。

\n
\n

1如果您一直使用git reset向后移动当前分支名称,则您的存储库中可能有多个提交,但您可能已将它们全部设置为“不可见”并且此时很难找到。原因是 Git通过从分支名称开始然后向后查找以前的提交来查找提交。该命令允许您移动名称,以便它选择您选择的任何任意提交,但一旦移动,该名称现在会找到提交及其之前的提交。git reset

\n

如图所示,假设您有一个存储库,其中包含三个提交,并且只有一个分支名称。我们的三个提交具有看起来随机的哈希 ID,为了避免使用它们,我们将这三个提交称为ABC;我们将让 Git 使用分支名称main来查找它们:

\n
A <-B <-C   <--main (HEAD)\n
Run Code Online (Sandbox Code Playgroud)\n

这里,名称main 指向第三次提交(包含其原始哈希 ID)C。 Commit C\xe2\x80\x94无论其真实哈希ID是\xe2\x80\x94包含所有文件的快照,加上一些元数据,其元数据包含早期提交的哈希ID B。所以 Git 可以使用mainto find C,然后使用Cto find B。 CommitB作为一次提交,还包含快照和元数据,并且B元数据包括第一次提交的哈希 ID A

\n

如果您使用git reset将名称向后移动一跳,例如 ,您会得到以下结果:main git reset HEAD~

\n
     C\n    /\nA--B   <-- main (HEAD)\n
Run Code Online (Sandbox Code Playgroud)\n

CommitC 仍然存在,但是如果不知道它的原始哈希 ID,您就无法找到它。这个名字main可以帮助你和Git找到commit B,而commitB向后指向commit A,所以你可以找到这两个commit,但是你再也找不到commitC

\n

第二个git reset结果是:

\n
  B--C\n /\nA   <-- main (HEAD)\n
Run Code Online (Sandbox Code Playgroud)\n

您和 Git 可以在其中找到 commit A,但无法再找到Bor C,除非您记住或以其他方式保存了它们的哈希 ID。但是,您不能git reset HEAD~再这样做了,因为这HEAD~意味着“提交之前的提交A”,并且不存在这样的提交。

\n