簡體   English   中英

Git 錯誤“致命:不明確的參數‘HEAD~’:未知的修訂版或路徑不在工作樹中。”

[英]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,為了避免使用它們,我們只調用三個提交ABC 我們將讓 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 ,但再也找不到BC ,除非你記住或以其他方式保存了他們的 hash ID。 但是,您不能再git reset HEAD~了,因為HEAD~表示“提交A之前的提交”,並且沒有這樣的提交。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM