git - 从 git 修订中删除特定文件/文件夹

标签 git

<分区>

假设我发现有些文件不应该在我的 git 修订版中。例如密码、API key 和商业 secret 文件。

有没有办法删除那些出现在修订版中的文件?并仍然保留该修订版中的其余文件?

最佳答案

git filter-branch可能有用。这允许您重写一系列过去的提交,更改已提交的内容。

如果您所做的更改从未离开您的本地存储库,那么这将起作用。如果您将有问题的更改推送到某个地方,或者如果有人从您那里撤回了它们,那么您将面临更大的问题,即在每个人 的存储库中删除它们。

但是,要修复您的本地存储库:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch bad-file1.txt bad-file2.txt' master..abc

这意味着:

  • git filter-branch:让我们重写一些提交!

  • --index-filter:更改每个提交的索引,而不实际将其 checkout 到磁盘上。

  • 'git rm --cached --ignore-unmatch bad-file1.txt bad-file2.txt':对于每个提交,取消暂存两个文件(如果存在)。

  • master..abc:对分支 abc 上的所有提交执行此操作,回到它从 master 分支 fork 的位置。您也可以说“master~3”来重写过去的 3 次提交,或任何其他 range of revisions .您还可以使用“-- --all”(两个破折号、空格、两个破折号、“全部”)重写存储库中的所有内容。

关于git - 从 git 修订中删除特定文件/文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11493558/

相关文章:

git - 如何获取(已删除)分支的 git log 显示名称

git - 检查旧提交并维护 master 分支上的头部?

Git:如何检查获取的内容

git - 是否可以不显示 git status 的特定文件夹中的更改?

html - 文件无法编辑 Github 页面

git - Perforce 分支与 git 分支

git - 在 Git 中恢复移动文件的历史记录

node.js - 库更新时的 Git 消息类型

git - 如何让 git-push 永久跳过详分割支的提交?

php - 版本控制内容管理系统?