簡體   English   中英

為什么 git reflog HEAD@{0} 返回不明確的參數

[英]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.

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