2011-07-12 32 views
3

如果我刪除了工作目錄的全部內容,然後嘗試使用git checkout我收到兩個不同的行爲,其恢復,這取決於命令行參數我公司提供:爲什麼git checkout的行爲不一致?

git checkout master 

我剛剛收到的所有名單刪除的文件和目錄,但沒有什麼是確實簽出。

但是當我做:

git checkout <directory 1 in master> 
git checkout <directory 2 in master> 
git checkout <directory 3 in master> 
git checkout <directory 4 in master> 
git checkout <directory 5 in master> 
git checkout <directory 6 in master> 
git checkout <directory 7 in master> 

最後才混帳管理,以恢復缺少了什麼。

這是爲什麼?

爲什麼「結帳」有兩個 git中的含義?

+0

http://www.kernel.org/pub/software/scm/git/docs/git-checkout.html – KingCrunch

回答

6

這不,但是你給它兩個不同的命令:

git checkout <branch> 

git checkout <directory> 

當你做對第二,git的假定是默認分支(在你的情況出現成爲「主」),當您執行第一個操作時,它將不會檢出,因爲在更改之前需要對該分支進行本地更改(所有刪除的文件)。

,如果你想看看一切(和吹走局部改變),你可以這樣做:

git checkout -f 

迫使結帳。

希望這有助於恢復缺少什麼

+0

這是我所期望的最佳答案。它真正解釋了這種適應行爲背後的哲學。謝謝! – WinWin

1

更快捷的方法是做一個git的復位 - 硬

git的結帳,除非你告訴它不會覆蓋您在工作樹所做的更改。

如果你給它一個路徑,你告訴它更新該路徑上的工作樹。

如果你不給它一個路徑,你告訴它改變索引到指定的分支而根本不更新工作樹。它假定所有缺少的文件都是您對工作樹所做的更改,您可能希望在索引中進行更改並提交。

+0

非常感謝+1的澄清。向自己添加提醒:'git checkout -f'沒有分支名稱或路徑,將確實恢復工作目錄中的所有內容,就像'cvs co '一樣。 :) – WinWin

1

manual page of git-checkout:在工作樹

更新文件,以匹配索引或指定的樹的版本。如果沒有給出路徑,git checkout也會更新HEAD以將指定的分支設置爲當前分支。

當< path>或--patch給出時,git checkout不會切換分支。它從索引文件或命名爲< tree-ish>(通常是提交)更新工作樹中的命名路徑。 ...

相關問題