如何在本地保留(和忽略)存储库中的文件的同时删除它们?

Wel*_*lls 5 git

我错误地将一些本地项目文件添加到 git 存储库并提交/推送它们。

我想从远程存储库中删除这些文件,将它们保留在本地,并在将来的提交/推送中忽略它们。

解决这个问题的最佳方法是什么?

Von*_*onC 5

最干净的解决方案如下:

  • git rm --cached本地的额外文件(注意--cached将这些文件保留在工作目录中的选项),
  • 将它们添加到您的.gitignore文件中,git commit -A -m "..."然后,
  • 推送您的分支(没有重写历史记录,但以前的历史记录将保留对这些文件的引用)。

如果您认为没有太多人从您的远程仓库中提取(理想情况下,没有),您可以:

  • 在本地修复您的提交历史记录
    git rebase --interactive first-commit-with-files^:'^' 引用您确实引入了坏文件的第一个提交的父提交。
    git rm --cached文件,然后重播其他提交,除非其中一些也对相同的文件进行了修改。
    其他解决方案在这里-git filter-branchgit rebase),
  • push --force 您的分支,
    (但是,请准备好向人们指出手册页的从上游 REBASE 恢复部分git rebase)。
    (请参阅此处的上游定义