2015-11-01 141 views

回答

1

如果你發出命令

git checkout * 

則執行git checkout之前,你的shell將擴大*水珠。例如,如果你有文件A.TXTb.txt,並c.txt,外殼會在運行它之前展開,以

git checkout a.txt b.txt c.txt 

。相反,當您使用\*時,*會被轉義並直接傳遞給git checkout

1

從手冊頁:

git checkout [-p|--patch] [<tree-ish>] [--] <paths> 

當<路徑>或--patch給出,GIT中結帳確實開關 分支。它更新 中索引文件或命名爲< tree-ish >(通常是提交)的工作樹中的命名路徑。在這種情況下, -b和--track選項毫無意義,導致其中任何一個都會導致錯誤。在更新工作樹之前,參數 可用於指定特定的樹(即提交,標記或樹)以更新給定路徑的索引。

在這裏,他正在逃避glob \*,以防止bash擴大它;所以它可以被git用來擴展索引中的內容。

EDIT(後問題更新):

git commit -, 'canonical version': 它只是一個錯字(注意如何,只是旁邊鍵)commit -m '...' .....

實際上git commit --file -會從標準輸入讀取它的輸入,當用於管道來自其他命令的數據時;但它不是你的例子中的意圖。

+0

我現在明白,在傳遞給git之前,傳遞「\ *」可以防止bash從glob擴展。但我仍然不明白git在做什麼。你是什​​麼意思「所以它可以被git用來擴展索引中的內容」? – George

+0

你有你的工作目錄包含文件; git索引包含一個文件列表(已添加到索引的文件)。如果你做'git checkout *''bash會將'*'與當前工作目錄匹配,展開命令並執行'git checkout file1 file2 file3 ...'。如果你使用'git checkout \ *',git將會收到glob,並將它與索引中的列表進行匹配,執行上面黃色框中描述的操作,所有匹配的文件(在本例中都是這些文件)。 –

相關問題