![](/img/trans.png)
[英]Git error "fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree"
[英]Git error "fatal: ambiguous argument 'HEAD~': unknown revision or path not in the working tree."
我想從我的項目存儲庫中刪除我的最后一次提交。 但是當我運行“git reset --soft HEAD^”或“git reset --hard HEAD^”時,
它顯示'fatal: ambiguous argument 'HEAD~': unknown revision or path not in the working tree. 使用 '--' 將路徑與修訂分開,如下所示:'git [...] -- [...]''
有什么問題?
問題很簡單:此時,您的存儲庫中只有一個提交, 1因此HEAD~
或HEAD^
— 在當前提交之前命名提交 — 沒有要命名的提交。 您不能將當前分支名稱移回一次提交,因為沒有先前的提交。
1如果您一直在使用git reset
將當前分支名稱向后移動,則您的存儲庫中可能有多個提交,但此時您可能已將它們全部“隱藏”並且很難找到。 這樣做的原因是 Git 通過從分支名稱開始然后向后工作到以前的提交來查找提交。 git reset
命令允許您移動名稱,以便它選擇您選擇的任意提交,但一旦移動,該名稱現在會找到該提交及其之前的提交。
如圖所示,假設您有一個存儲庫,其中包含三個提交,並且只有一個分支名稱。 我們的三個提交具有看起來隨機的 hash ID,為了避免使用它們,我們只調用三個提交A
、 B
和C
; 我們將讓 Git 使用分支名稱main
來查找它們:
A <-B <-C <--main (HEAD)
在這里,名稱main
指向(包含原始 hash ID)第三次提交C
。 提交C
無論其真實的 hash ID 是什么——包含所有文件的快照,以及一些元數據,其元數據包含早期提交B
的 hash ID。 所以Git可以用main
找到C
,再用C
找到B
作為提交的提交B
還包含快照和元數據,並且B
的元數據包括第一個提交A
的 hash ID。
如果您使用git reset
將名稱main
向后移動一跳,例如git reset HEAD~
,您會得到:
C
/
A--B <-- main (HEAD)
提交C
仍然存在,但在不知道其原始 hash ID 的情況下,您無法找到它。 名稱main
幫助您和 Git 找到提交B
,並且提交B
向后指向提交A
,因此您可以找到這兩個提交,但您再也找不到提交C
。
第二次git reset
導致:
B--C
/
A <-- main (HEAD)
你和 Git 可以找到提交A
,但再也找不到B
或C
,除非你記住或以其他方式保存了他們的 hash ID。 但是,您不能再git reset HEAD~
了,因為HEAD~
表示“提交A
之前的提交”,並且沒有這樣的提交。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.