我无意中将工作区配置文件追踪到Git仓库中。为了解决这个问题,我使用git rm --cached
命令移除了这些文件,并将它们添加到.gitignore
文件中。
现在每次我从该仓库中检出一个分支时,这些文件都会被删除。有没有办法避免这种情况发生?
我无意中将工作区配置文件追踪到Git仓库中。为了解决这个问题,我使用git rm --cached
命令移除了这些文件,并将它们添加到.gitignore
文件中。
现在每次我从该仓库中检出一个分支时,这些文件都会被删除。有没有办法避免这种情况发生?
git rm
提交存在于某些分支中,而不存在于所有分支中,这意味着当您从仍包含文件的一个分支切换到您已经使用 git rm
的另一个分支时,它将会正确地删除文件。实际上,您想要做的是从git的历史记录中删除文件,就像它们从未存在过一样,遵循此问题。但是请注意,这意味着需要重写存储库历史记录,因此首先您将不得不进行 git push --force
,其次,您将会使其他人感到不满,他们也在与此repo一起工作。
编辑如果无法重写历史记录,请确保在每个现有的分支上提交 git rm --cached
操作。但是请记住,检出该删除操作之前的修订版本(例如通过标记)仍然会导致不愉快的重新删除。
摘要:
.gitignore
+ git rm --cached
,但请记住,检出任何以前的修订版本(例如通过标记)都将a)引发错误,因为 git 想要检出现有的未跟踪文件,并且 b)在切换回 HEAD 时会再次删除这些文件。1这是因为您不希望删除其他用户的那些从一开始就不应该进行版本控制的文件版本,而且由于人们不会预期要切换回旧版本,所以这永远不会导致“文件已经存在”的错误。
.gitignore
一致的问题。 - Yuval Adam.gitignore
中不会解决分支更改时的删除问题(尽管在每个分支上进行 git rm
+ .gitignore
提交可以解决这个问题,并且如果许多用户访问仓库,则应优先考虑,即使以脏历史为代价…) - Tobias Kienzlergit rm --cached
提交,否则另一个分支虽然忽略文件,但仍会跟踪它们,当 git 切换到您已经执行了 git rm
的分支时,它将认为 "好的,现在我正在从一个文件仍然存在的分支切换到一个文件不存在的分支,所以我必须删除它们"。正如所说的那样,“更清洁”的解决方案是重写历史记录,以便这些文件似乎从未被跟踪过,但是这是否适用于您取决于谁还访问该存储库。 - Tobias Kienzler
git rm
提交意味着切换到该分支(从仍有版本控制的文件的分支)将导致 git 再次(正确地)删除这些文件。历史记录可能需要被重写。 - Tobias Kienzler