Git checkout旧提交后仍保留大量当前文件/文件夹的疑问
问题解答
这是Git的正常行为——git checkout <commit_hash>只会同步仓库已追踪的文件到指定提交的状态,那些旧提交里不存在、后续新增的未追踪文件/文件夹(包括空文件夹)会被保留,因为Git默认不会主动删除未被它记录的内容。
要彻底清理这些残留的文件/文件夹,有两种靠谱的办法:
方法一:先处理未提交修改,再清理未追踪内容
- 如果当前工作区有未提交的修改,先执行
git stash把这些修改暂存起来(之后想恢复可以用git stash pop) - 执行
git checkout <commit_hash>切换到目标旧版本 - 执行
git clean -fd,这个命令会删除所有未被Git追踪的文件和空文件夹(-f强制删除,-d包含文件夹)
- 如果当前工作区有未提交的修改,先执行
方法二:直接重置到目标提交(会丢弃所有未提交修改)
执行git reset --hard <commit_hash>,这个命令会把HEAD指针、暂存区、工作区直接重置到指定提交的状态,自动清理掉所有不在该提交中的文件,包括未追踪的内容。但要注意,这个操作会彻底丢弃当前所有未提交的修改,执行前一定要确认不需要这些内容。
另外提一句:Android项目里的build目录这类构建生成的文件,通常都在.gitignore里属于未追踪文件,清理掉之后重新构建就能生成对应旧版本的构建文件,完全不影响使用。
内容的提问来源于stack exchange,提问作者Diego Perez
相关产品推荐
相关产品推荐

