-1 git
我想从项目存储库中删除我的最后一次提交。但是当我运行 'git reset --soft HEAD^ ' 或 'git reset --hard HEAD^' 时,
它显示“致命:不明确的参数“HEAD〜”:未知修订版或路径不在工作树中。使用“--”将路径与修订版分开,如下所示:“git [...] -- [...]”
有什么问题?
问题很简单:此时,您的存储库中只有一个提交,1 soHEAD~或\xe2\x80\x94,它在当前提交之前HEAD^命名该提交,\xe2\x80\x94 没有提交名称。您无法将当前分支名称移回一次提交,因为没有先前的提交。
1如果您一直使用git reset向后移动当前分支名称,则您的存储库中可能有多个提交,但您可能已将它们全部设置为“不可见”并且此时很难找到。原因是 Git通过从分支名称开始然后向后查找以前的提交来查找提交。该命令允许您移动名称,以便它选择您选择的任何任意提交,但一旦移动,该名称现在会找到该提交及其之前的提交。git reset
如图所示,假设您有一个存储库,其中包含三个提交,并且只有一个分支名称。我们的三个提交具有看起来随机的哈希 ID,为了避免使用它们,我们将这三个提交称为A、B和C;我们将让 Git 使用分支名称main来查找它们:
A <-B <-C <--main (HEAD)\nRun 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。
如果您使用git reset将名称向后移动一跳,例如 ,您会得到以下结果:main git reset HEAD~
C\n /\nA--B <-- main (HEAD)\nRun Code Online (Sandbox Code Playgroud)\nCommitC 仍然存在,但是如果不知道它的原始哈希 ID,您就无法找到它。这个名字main可以帮助你和Git找到commit B,而commitB向后指向commit A,所以你可以找到这两个commit,但是你再也找不到commit了C。
第二个git reset结果是:
B--C\n /\nA <-- main (HEAD)\nRun Code Online (Sandbox Code Playgroud)\n您和 Git 可以在其中找到 commit A,但无法再找到Bor C,除非您记住或以其他方式保存了它们的哈希 ID。但是,您不能git reset HEAD~再这样做了,因为这HEAD~意味着“提交之前的提交A”,并且不存在这样的提交。
| 归档时间: |
|
| 查看次数: |
10501 次 |
| 最近记录: |