“git branch checkout”不会更改目录内容

时间:2015-12-28 20:23:20

标签: git git-checkout

我有两个分支,我们称之为project/branch-Aproject/branch-B。在分支A中,我有一个目录,比方说parent/dirI/dirII/dirIII

在分支B中我有parent/dirI/dirIII我已将dirIII向上移动一级并删除dirII。现在,当我在分支A上并且去

git checkout branch-B

我仍然可以在dirII中看到dirIIIdirIII以及所有正确的内容。当我目前在branch-B并且去

时,这不会改变
git checkout branch-A

我再次获得相同的内容:dirIIdirIII都显示在dirI的较低级别。

发生了什么事? 我做错了什么吗?或者这是git应该如何工作的?

1 个答案:

答案 0 :(得分:0)

再次checkout branch-A时,dirI/dirIII成为一个“私人”未跟踪文件夹(从branch-A角度来看):默认情况下,检出操作不会删除未跟踪的内容。

git checkoutbranch-A HEAD提交恢复工作树和索引,并且在branch-A索引中,dirI/dirIII不存在:其内容(文件)被认为是未跟踪的,照原样
如“ Git checkout has deleted untracked files unintentionally中所述,未跟踪的文件是索引中不存在的

在Git 2.23(2019年8月)中,您将改用git switch

git switch -f branch-A

-f的别名为--force--discard-changes

--discard-changes
  

即使索引或工作树与HEAD不同也继续。
  恢复索引和工作树以匹配切换目标
  这是用来丢弃本地更改的。