从Git存储库和历史记录中删除目录,而不从本地文件系统中删除它

时间:2014-06-20 18:37:31

标签: git github gitignore

我还在学习Git,我通过在我的仓库中添加一个包含许多大文件的目录来做一件蠢事。现在,我想从Git中删除该目录。我知道how to use gitignore,我知道how to remove a file from git but not from the local filesystem,但我也希望将目录(及其内容)从存储库的历史中删除。我在这里看到了一些类似的问题,但似乎没有一个问题与我的情况有关。特别是,我想在我的本地文件系统上保持目录不变。

我应该注意到,作为一个新的存储库,我还没有与其他用户分享这个,所以我现在不关心与其他用户有关的任何事情。

1 个答案:

答案 0 :(得分:1)

有几种方法可以从Git中删除文件和目录历史记录:

  1. git reset使用适当的模式(硬,软,混合等)。
  2. 互动式变基。
  3. 使用git filter-branch
  4. 可能有更多的方法(我需要更多考虑它)。你使用哪一个取决于你的情况。

    假设您在最后一次(例如15次提交)中将目录添加到Git历史记录中,您可以使用交互式rebase。参见

    如果目录之前添加了许多提交(超过100个),那么git filter-branch可能是一个更好的选择,它将比一百个或更多的交互式rebase运行得更快,更方便使用提交。

    确保复制目录及其内容并暂时将其保存在Git项目目录之外,然后再尝试将其从存储库历史记录中删除。然后再将目录移回。