簡體   English   中英

git checkout到新分支不會刷新索引和工作目錄的內容

[英]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的快照填充索引(因為devmaster指向同一提交,我在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.

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