我有两个分支,我们称之为project/branch-A
和project/branch-B
。在分支A中,我有一个目录,比方说parent/dirI/dirII/dirIII
。
在分支B中我有parent/dirI/dirIII
我已将dirIII
向上移动一级并删除dirII
。现在,当我在分支A上并且去
git checkout branch-B
我仍然可以在dirII
中看到dirIII
和dirIII
以及所有正确的内容。当我目前在branch-B
并且去
git checkout branch-A
我再次获得相同的内容:dirII
和dirIII
都显示在dirI
的较低级别。
发生了什么事?
我做错了什么吗?或者这是git
应该如何工作的?
答案 0 :(得分:0)
再次checkout branch-A
时,dirI/dirIII
成为一个“私人”未跟踪文件夹(从branch-A
角度来看):默认情况下,检出操作不会删除未跟踪的内容。
git checkout
从branch-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不同也继续。
恢复索引和工作树以匹配切换目标。
这是用来丢弃本地更改的。