[英]why does git reflog HEAD@{0} return ambiguous argument
我在使用 git 的reflog
命令時遇到問題。 閱讀官方文檔,我的印象是, main
是您提交了幾次的本地分支,例如,您可以調用git reflog show main@{1}
或等效的git reflog main@{1}
來顯示第二個 -在main
分支中最后一次提交,同樣的事情應該適用於HEAD
。
如果我嘗試這樣做,即使是在只有三個提交的新倉庫中
$ git reflog main
8a0a764 (HEAD -> main) main@{0}: commit: third commit
44b44f1 main@{1}: commit: second commit
b869f71 main@{2}: commit (initial): first commit
我收到以下錯誤:
fatal: ambiguous argument 'main@': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
我錯過了什么?
ETA:我使用的是 Windows 10 機器,默認 Windows 終端 shell(PowerShell),並使用建議的引號似乎解決了問題。
類 Unix 系統具有稱為shells的命令解釋器。 流行的 shell 包括 bash 和 zsh,但還有更多。 每個 shell 都有自己的特殊怪癖。
shell 支持文件名通配是很常見的:例如, echo *
具有*
擴展到所有文件名,因此echo
不必這樣做。 我會驚訝地發現 shell 沒有這樣做(盡管一切皆有可能。)。 這意味着,如果您想將文字*
傳遞給包括 Git 在內的任何命令(Git 將執行其自己的全局樣式擴展,這在各種情況下與 shell 的擴展不匹配),您需要引用星號。 否則 shell 會說:啊哈,一個星號,我必須用別的東西代替它。 所以echo '*'
使echo
打印文字字符*
。
花括號字符有時會在某些shell 中得到這種處理。 例如,在 csh 或 tcsh 中, {
參與大括號擴展:
tcsh$ echo {foo,bar}{baz,quux}
foobaz fooquux barbaz barquux
在這里, HEAD@{1}
觸發大括號擴展,它將HEAD@1
轉儲到最終的 Git 命令中。 這不是您所看到的——你得到了HEAD@
,去掉了{1}
部分——很明顯你沒有使用 csh 或 tcsh。
bash
shell 做了同樣的把戲,但更聰明一點:
bash$ echo {foo,bar}{baz,quux}
foobaz fooquux barbaz barquux
bash$ echo HEAD@{1}
HEAD@{1}
因為{1}
中沒有逗號,所以1 bash
會整個事情,因此將正確的事情傳遞給echo
。
很明顯,無論您使用什么 shell,它都對{1}
部分做了一些事情。 什么以及為什么將取決於您使用的任何 shell。 大多數 shell 遵循簡單的引用規則,其中單引號引用所有內容,因此'HEAD@{1}'
應該可以工作。 當我處於這種情況時,我傾向於使用HEAD@\{1}
或HEAD@'{1}'
,它們也可以工作。 有關詳細信息,請參閱特定 shell 的文檔。
1 Bash 的大括號擴展在與數值或單個字符組合時也特別對待雙點; csh/tcsh 沒有。
對我來說很好。 我試過了,這就是我得到的:
$ git reflog
aea0abc (HEAD -> main) HEAD@{0}: commit: three
2f583ad HEAD@{1}: commit: two
0a44af0 HEAD@{2}: commit: one
接着:
$ git reflog show main@{1}
2f583ad main@{1}: commit: two
0a44af0 main@{2}: commit: one
所以,正如已經建議的那樣,聽起來你的命令行環境對短語main@{1}
的語法不滿意——但你沒有告訴我們關於那個環境的任何事情,所以很難說是什么問題可能。 (如果有幫助的話,我在 Mac 上使用 Bash。)正如 torek 的回答所暗示的,說git reflog show 'main@{1}'
可能會在您的機器上解決它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.