我想从项目存储库中删除我的最后一次提交。但是当我运行 'git reset --soft HEAD^ ' 或 'git reset --hard HEAD^' 时,
它显示“致命:不明确的参数‘HEAD~’:未知修订版或路径不在工作树中。 使用“--”将路径与修订版分开,如下所示: 'git [...] -- [...]''
有什么问题吗?
问题很简单:此时,您的存储库中只有一个提交,1,因此
HEAD~
或 HEAD^
(将提交命名为 当前提交之前)没有提交姓名。 您无法将当前分支名称移回一次提交,因为没有先前的提交。
1如果您一直使用git reset
向后移动当前分支名称,则您的存储库中可能有多个提交,但您可能已将它们全部设置为“不可见”并且此时很难找到。 原因是 Gitfinds 是通过从 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
main
可以帮助你和 Git 找到提交
B
,而提交
B
向后指向提交
A
,因此你可以找到这两个提交,但你无法再找到提交
C
。第二个
git reset
结果:
B--C
/
A <-- main (HEAD)
您和 Git 可以在其中找到提交 A
,但无法再找到
B
或
C
,除非您记住或以其他方式保存了它们的哈希 ID。 不过,你不能再
git reset HEAD~
了,因为
HEAD~
的意思是“提交之前的提交
A
”,而没有这样的提交。
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