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

问题描述 投票:0回答:2

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

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

有什么问题吗?

git
2个回答
7
投票

问题很简单:此时,您的存储库中只有一个提交,1,因此

HEAD~
HEAD^
(将提交命名为 当前提交之前)没有提交姓名。 您无法将当前分支名称移回一次提交,因为没有先前的提交。


1如果您一直使用git reset

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

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

A

B
C
;我们将让 Git 使用分支名称 
main
 来查找它们:

A <-B <-C <--main (HEAD)
这里,名称 

main

 
指向 (包含其原始哈希 ID)第三次提交 C
。  提交 
C
(无论其真实哈希 ID 是什么)包含所有文件的快照以及一些元数据,并且其元数据包含早期提交 
B
 的哈希 ID。  所以 Git 可以使用 
main
 来查找 
C
,然后使用 
C
 来查找 
B
。  提交
B
作为一次提交,还包含快照和元数据,
B
的元数据包括第一个提交
A
的哈希ID。

如果您使用

git reset

 
移动名称 main
 
向后一跳,例如 git reset HEAD~
,您会得到:

C / A--B <-- main (HEAD)
提交

C

仍然存在,但如果不知道其原始哈希ID,您无法找到它。  名称 main
 可以帮助你和 Git 找到提交 
B
,而提交 
B
 向后指向提交 
A
,因此你可以找到这两个提交,但你无法再
找到提交C

第二个

git reset

 结果:

B--C / A <-- main (HEAD)
您和 Git 可以在其中找到提交 

A

,但无法再找到 
B
C
,除非您记住或以其他方式保存了它们的哈希 ID。  不过,你不能再 
git reset HEAD~
 了,因为 
HEAD~
 的意思是“提交之前的提交 
A
”,而没有这样的提交。


0
投票
如果这是第一次提交并且没有提交,那么您在使用

git reset --soft HEAD~1

 时可能会收到此错误。

错误

fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]

解决方案对我有用

git update-ref -d HEAD


由于它是唯一的提交,因此您可以通过将存储库重置为空状态(即无提交)来删除该提交。这将删除

HEAD

 引用,使存储库就像一个全新的、初始化的存储库,无需任何提交。

现在
检查

git log

。所有文件都将添加到暂存中。下面应该是输出。

fatal: your current branch 'main' does not have any commits yet


    

© www.soinside.com 2019 - 2024. All rights reserved.