2013-01-22 41 views
22

下一步git命令之間的區別:Git的結賬與點

git checkout branch 
git checkout branch . 
git checkout . #<-- used at the branch 

爲什麼當我結賬的不同分支與第一個我錯過了一些文件不同的文件夾。
但是當我使用第二個命令時,一切正常?

+0

這不是用在「在分店」。第一個參數只被認爲是一個分支,如果它真的命名了一個分支,那'''不會。所以這只是路徑。如果你說'git checkout,它只會是分支。 - ',git會抱怨沒有名爲'.'的修訂版。 –

+0

第一種形式是將分支簽出到當前的工作副本中。那麼,「進入不同的文件夾」是什麼意思? –

+0

我的意思是,我有例如2個分支。首先將成功結賬,但第二次會遺漏一些文件。但是,如果我使用第二行,一切都會好的 – Arseniy

回答

30

git checkout(1)做了非常不同的事情,無論給定路徑說明符還是不行。

  1. 隨着分行符僅git checkout branch)將切換當前工作目錄到指定的分支,保持如果可能的話,並沒有否則局部變化。如果你已經在branch,它什麼都不會做。它只修改工作目錄中HEADbranch之間不同的文件,如果它們中的任何一個有本地修改(索引或不索引),則會失敗。
  2. 隨着路徑說明將與指定的內容覆蓋所有匹配的文件(所有文件匹配.):
    1. 隨着路徑說明只有git checkout .)從索引寫的內容。這是取消未分配本地修改。要撤消分階段修改,請使用帶路徑說明符的git reset
    2. 使用分支和路徑說明符git checkout branch .)它將內容寫入指定的修訂版。它會而不是修改其中HEAD點,所以如果branch不同於HEAD,之後會有未分配的更改。

注意,該man page區分附加的情況下使用的-b /的 - 分支選項和-p/- 補丁的選擇,但這些大多屬於上述情況直接擴展。

+0

請提供鏈接 – Arseniy

+2

@Pepelac:它是在手冊頁的那裏;谷歌在結果的第一頁中找到了幾個版本。你有沒有嘗試過? –

1

上面的解釋很好,但讓我解釋一下例子。

git checkout可以與文件夾和分支一起使用。

假設有index.html文件和dev文件夾。

如果我意外地更改了index.html,我想撤消該操作,我將只運行git checkout index.html。它會讓我的文件恢復到原來的形式。

現在讓我說我在dev文件夾內進行了一些更改,並希望這些更改回到dev文件夾內。如果我將使用git checkout dev並且如果有任何dev分支,那麼它將檢出開發分支而不是名爲dev的文件夾。

因此,而我會跑 git checkout -- dev

現在這個裸雙破折號表示當前分支。所以上面的命令是從git請求是,請給我'當前分支名爲'dev'命名文件夾。

讓我們談談你的用例。

git checkout branch這個命令會結賬的分支命名爲「分支」

git checkout branch .第二個命令會告訴GIT中說,請從命名爲「分支」

git checkout . #<-- used at the branch,你是分支籤.或當前文件夾的名稱先說你使用git checkout branch切換到名爲'branch'的分支,那麼你只是在做git checkout .現在沒有分支名爲.,所以它只會從當前分支下拉當前文件夾名稱。