社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

git签出到新分支不会刷新索引和工作目录的内容

Gaurang Tandon • 5 年前 • 1447 次点击  

我一直在研究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 是在 开发 主人 指向相同的提交,正如我在 Visualizing Git )中。该提交不应该有该文件 a.txt ,因为它是在提交之后创建的。另外,我的工作目录应该与索引具有相同的内容,即没有文件 文本 是的。

然而,正如您在上面的输出中看到的,我的工作目录碰巧有 文本 ,它由 git status 是的。

我想知道我在解释这段话时犯了什么错误。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47451
 
1447 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Romain Warnan
Reply   •   1 楼
Romain Warnan    6 年前

这是正常的行为 git checkout :作为 stated in the documentation 以下内容:

保存对工作树中文件的本地修改,以便将它们提交到 branch .

Tim Biegeleisen
Reply   •   2 楼
Tim Biegeleisen    6 年前

据我所知,git checkout在切换分支时会在工作目录中携带修改过的文件。这个 documentation 支持此声明:

Git签出<分支>
若要准备使用“分支”,请通过更新工作树中的索引和文件,并将头指向分支来切换到该分支。 将保留对工作树中文件的本地修改,以便它们可以提交到<分支>。

至于git为什么会有这种行为,这可以防止通过更改分支意外地清除工作目录中的更改。