6

我有一个远程裸 git 存储库。

一位新开发者克隆了它,但他没有正确配置的 .gitignore 文件,因此他错误地将一些不需要的文件推送到远程。当我提取更改并合并时,我得到了这些以前未跟踪的文件。其他人也从远程提取了更改,并且也拥有这些不需要的文件。

如何从远程存储库以及其他所有人的远程/来源/分支中删除这些文件?

4

2 回答 2

7

请参阅 github 对此有一个常见问题解答:https ://help.github.com/articles/remove-sensitive-data 以下是步骤:

  1. 从本地(工作)树重写树。

    $ git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' \ --prune-empty --tag-name-filter cat -- --all

  2. 强制推送到远程。

    $ git push origin master --force

  3. 每个人都从遥控器中拉出(并--force在需要时使用)

为了防止这种情况再次发生,您应该.gitignore在存储库中检查(并且可以选择在服务器上设置一个挂钩)

于 2012-09-07T03:39:51.347 回答
2

这是一个三步过程:

  1. 从存储库的副本中删除文件(使用git rm完全从历史记录中清除这些文件,具体取决于这些文件从不在存储库中的重要性)
  2. 使用 . 将您的更改推送回远程存储库git push --force
  3. 让每个人都知道他们可以重新拉取存储库——这将需要git rebase他们在最后一次知道好的提交上进行工作。

作为最后一步,您可能还希望将.gitignore文件添加到存储库,以便在克隆存储库时忽略所有正确的文件。

于 2012-09-07T03:40:06.620 回答