Git:在两个分支之间切换时文件保留

3

我有两个分支:masterweb,并且我的工作副本在一个目录中。在web分支中,我有一个名为foo的文件夹。我在foo的文件上工作,并提交了工作。然后我用以下命令切换到master分支:

git checkout master

然而,foo文件夹仍然存在于我的工作副本中。这看起来很奇怪!在主分支上进行Git status 检查告诉我一切正常。但是文件夹foo并不属于master分支。即使我执行

git checkout .

web文件夹保存在我的工作副本中,为了解决问题,我删除了web文件夹。现在,git status告诉我一切正常。

但这很奇怪,到底发生了什么,如何避免这种情况发生?


1
请查看 git clean 命令。Git 是一个文件跟踪器,所以当你切换分支时,文件夹仍然存在。如果你使用 -d 选项进行 git clean,则会删除目录,但我强烈建议在执行其他变体之前先使用 git clean -n 查看将要发生的情况! - rasmeister
2
对我来说看起来很奇怪的是,每次我切换到一个分支时,我的工作副本通常都会被修改。旧分支的所有文件夹都消失了,新文件夹出现了。这正是我想要做的,但这并不是我所描述问题的情况。 - floatingpurr
我在这里找到了一个可能的解释:https://dev59.com/xm865IYBdhLWcg3wTcpY#22169659 - floatingpurr
1个回答

1
我认为你在foo中有一个文件也提交到了主分支。请比较以下输出结果:
git checkout web
git ls-files foo

使用

git checkout master
git ls-files foo

如果文件夹未被版本控制,ls-files命令应返回空。但我认为您仍将获得输出。
Git确实会跟踪哪些文件夹是独占分支的,并在切换分支时将其删除。git status还报告所有未跟踪的文件,这些文件不在.gitignore中。

git ls-files foomaster 分支中是空的。'foo' 一直是独占于 web 分支的。我一直小心地使用 git,所以我不明白这是怎么发生的。可能是 Atom 的问题吗?我通过 bash 切换分支,但在 Atom 中可视化项目... - floatingpurr
主分支上运行 ls -al foo 的输出是什么? - Harald Nordgren
“没有这样的文件或目录”,但正如我所描述的那样,我手动删除了该文件夹,以使我的工作目录与最后的“master”提交保持一致。 - floatingpurr
你能先检查一下网页,然后再检出主分支吗?在执行 rm 命令之前,尝试使用 ls-filesls -al 命令。 - Harald Nordgren
我已经删除了文件,但不理解为什么会出现这种情况。可能是Atom的git管理有问题? - floatingpurr
可能的解释在这里:https://dev59.com/xm865IYBdhLWcg3wTcpY#22169659 - floatingpurr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接