[英]Git checkout to a new branch does not refresh contents of index and working directory
我一直在學習ProGit一書,在“ Reset Demystified”主題下偶然發現了這一段:
切換分支或克隆也要經歷類似的過程。 簽出分支時,它將HEAD更改為指向新的分支引用,並使用該提交的快照填充索引,然后將索引的內容復制到工作目錄中。
但是,如您在以下終端輸出中看到的,我無法復制該行為。
GaurangTandon@Gaurang MINGW64 /j/test (master)
$ git status
On branch master
nothing to commit, working tree clean
GaurangTandon@Gaurang MINGW64 /j/test (master)
$ touch a.txt
GaurangTandon@Gaurang MINGW64 /j/test (master)
$ git checkout -b "dev"
Switched to a new branch 'dev'
GaurangTandon@Gaurang MINGW64 /j/test (dev)
$ git status
On branch dev
Untracked files:
(use "git add <file>..." to include in what will be committed)
a.txt
nothing added to commit but untracked files present (use "git add" to track)
根據我對這一段的解釋,根據我的理解:在我簽到新的分支dev
,Git應該用提交master
的快照填充索引(因為dev
和master
指向同一提交,我在Visualization Git上進行了驗證。 該提交不應具有文件a.txt
,因為它是在提交之后創建的。 另外,我的工作目錄應該具有與索引相同的內容,即沒有文件a.txt
。
但是,如您在上面的輸出中看到的那樣,我的工作目錄中恰巧有文件a.txt
,並且它被git status
檢測到。
我想了解我在解釋該段時犯了一個錯誤。
據我所知,當切換分支時,Git checkout將在工作目錄中保留修改后的文件。 該文檔支持以下主張:
git checkout <分支>
要准備在<branch>上工作,請通過更新工作樹中的索引和文件,並將HEAD指向分支來切換到該分支。 保留對工作樹中文件的本地修改,以便可以將其提交給<branch>。
至於為什么Git可能有這種行為,這可以防止通過更改分支意外清除工作目錄中的更改。
這是git checkout
的正常行為:如文檔中所述 :
保留對工作樹中文件的本地修改,以便可以將其提交到
branch
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.