繁体   English   中英

Git:从分支中删除不需要的未跟踪文件

[英]Git: remove unwanted untracked files from branch

我从master更新了我的分支,并且有一些在master上删除的文件,但仍保留在我的本地并显示为未跟踪的文件。 我想删除这些文件 - 即确认我不再希望它们在我的本地。

我已经尝试了git rm <file>但这没有任何作用 - 当我运行git status时没有消息也没有变化。

我已经尝试从master( git checkout -- <file>git checkout -- <file>但当然我收到一条消息,说主文件上不存在该文件。

我试过运行git clean -n但是我收到很多消息说Would not remove <file>

我也尝试删除分支git branch -D <branch-name>并引入一个新版本,但仍然得到相同的合并冲突。

有谁知道我能做什么?

TL; DR

这个问题似乎没有意义。 未经跟踪的文件已经存在,因此无需删除。 更确切地说, 未跟踪文件是工作树中的文件,但不在索引中。 因此,Git只是让它坐在那里,除了两件事之外, 大多数都忽略了它:

  • 例如,Git在git status输出中一直抱怨它未被跟踪。
  • 使用任何意味着“添加所有内容”的选项运行git add ,例如git add . ,将它添加索引,以便现在跟踪它。

为了阻止这两种令人烦恼的情况,人们列出.gitignore文件中特定的未跟踪文件名或名称模式。 注意.gitignore不会导致文件变得未跟踪; 它只是关闭了Git关于工作树的文件,并确保“添加所有”跳过该文件。

未跟踪文件是不在索引中的文件。 索引是它自己独立的东西:它不是一个分支,它不是一个工作树。 相反,它是您通过暂存更新的文件来构建您打算进行的下一次提交的地方。 这就是为什么它有时被称为临时区域 它还具有索引和缓存工作树的效果,因此它的名称索引和第三个名称, 缓存

请注意,索引是一种现实的东西:它的内容随着时间的推移而变化,特别是在您检查特定提交时,或者去创建新的提交。 但是,在任何情况下,索引都不是分支的一部分,因此“从分支中删除未跟踪的文件”没有立即意义。 但是,我们也必须去拖住所说的“分支”在这里的意思:看我们究竟由“分支”是什么意思?

请注意, 分支名称指向一个特定的提交。 如果运行git checkout name ,则表示您正在检查name指向的特定提交。 签出提交的行为填写了索引,所以现在索引包含一些文件集, 现在我们可以讨论某个文件是否在索引中,因此是否未跟踪。 未经跟踪的词出现往往比跟踪 ,但它似乎很清楚,一个跟踪文件是一个在索引中。)

如果在git checkout name后跟踪了一些路径P ,则运行git rm P后跟git commit将进行新的提交,并更改name以便识别此新提交。 这个新的提交将是一个,当签出时,将P 索引中删除,必要时将其从索引中删除。 所以现在name标识了一个路径为P未跟踪的提交。 如果你的意思是上面的“分支”,那么这就是你的答案。

另一方面,如果你的意思是“分支”这个词包含所有可以从名称中获得提交 ,或者沿着这些行提供的东西,那么你就会遇到更棘手的问题。 您根本无法更改任何现有提交。 您可以进行一系列新提交,您认为它们比原始文件“更好”:例如,您可以进行一系列新提交,其中没有一个具有路径P ,然后停止使用所有旧提交和开始只使用这些新提交。 这就是许多调用重写历史记录的内容:更改由某些分支名称标识的提交集,以便这些新的和改进的提交与所有原始提交不同。 这种历史重写的缺点是你必须让所有这些存储库的克隆用户将他们的所有用法切换到新的提交; 否则旧的承诺会继续回来,就像某种可怕疾病的坏情况一样。

我已经尝试过运行git clean -n但是我收到很多消息说不会删除。

-n表示dry-run ,即实际上不删除任何东西,只显示将要执行的操作。 ,这条消息只是告诉你这个事实。

如果要删除未跟踪的文件,则应使用命令git clean -dxf

git clean manpage的quatation

-d

除了未跟踪的文件之外,删除未跟踪的目录。 如果未跟踪的目录由不同的git存储库管理,则默认情况下不会删除它。 如果您确实要删除此类目录,请使用-f选项两次。

-f, - force

如果git配置变量clean.requireForce未设置为false,则除非给定-f或-n,否则git clean将拒绝运行。

-X

不要使用从.gitignore(每个目录)和$ GIT_DIR / info / exclude读取的标准忽略规则,但仍然使用-e选项给出的忽略规则。 这允许删除所有未跟踪的文件,包括构建产品。 这可以使用(可能与git reset一起使用)来创建一个pristine工作目录来测试一个干净的构建。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM