【问题标题】:How do I delete a file from the Git Commit history from every branch locally and remotely?如何从本地和远程每个分支的 Git 提交历史记录中删除文件?
【发布时间】:2018-09-21 03:58:27
【问题描述】:

这里是 Git 新手,

如何从我的 Git 提交中删除文件的所有痕迹 - 例如在每个分支的任何地方删除它,本地和远程。

我看到的大多数文章和 Stack Overflow 的东西都表明这是一种可行的方法:

 git filter-branch --tree-filter 'rm -f file_to_remove.py' HEAD

 git filter-branch --tree-filter 'rm -f file_to_remove.py' ..HEAD

 git filter-branch --force --tree-filter 'rm -f file_to_remove.py' -- --all

等等……

但是,我似乎无法工作。

一方面,我不断收到类似的错误,或者其他分支的另一个类似错误。

WARNING: Ref 'refs/remotes/origin/master' is unchanged" 

我运行了最后一个,它经历了所有的修订,“看起来”像是在做某事,但后来我执行了......

git show <<REVISION_HASH_NUM>>:file_to_remove.py 

这表明该文件仍然存在于提交历史记录中。同样,我对该文件的 Git 提交历史仍然存在于 TFS 中。

此外,还有 247 个提交和 16 个以上的其他开发人员使用此存储库。我无法对 Master 分支进行核攻击。

附:请不要向我推荐其他 Stack Overflow 帖子。我已经看过其中的大多数。另外,请不要说要改写我的问题。如果我有足够的知识来正确地提出问题,那么我就可以自己解决问题了。

提前致谢!

【问题讨论】:

  • 欢迎您!正如现有答案所涵盖的那样,您无法在不引起大量问题的情况下重写远程历史记录 - 尽管如果您让团队中的每个人都与您合作,您可能会想出办法。但是,如果您可以提供一些有关您为什么要这样做的背景信息,那么有人可能会想出另一种方法来解决您的问题。我最初的问题是:1)这个文件是什么,为什么需要从历史记录中删除它? 2) 最初何时提交,有多少分支受到影响?

标签: git tfs


【解决方案1】:

拳头:比git filter-branch 简单得多的工具是BFG Repo-Cleaner - 在git filter-branch 的手册中已经提到过。该工具使删除对象变得更加容易。

第二个:你的测试

git show <<REVISION_HASH_NUM>>:file_to_remove.py 

是有缺陷的:即使在过滤了现有提交的内容之后也没有改变。相反,filter-branch 创建了新的提交并因此创建了新的哈希值。旧的提交也不会立即删除——它们只是无法从重写的分支和标签中访问。一段时间后,它们会被垃圾回收。

所以一个简单的测试是使用选项 --no-hardlinks 克隆你的 repo 并检查那里的历史记录。

第三:

此外,还有 247 个提交和 16 个以上的其他开发人员使用此存储库。我无法对 Master 分支进行核攻击。

没有机会 - 提交的内容与哈希绑定,反之亦然。如果您更改内容,则更改哈希 - 您正在“改写历史”(Google 搜索词)。这 16 位以上的开发者会恨你的 :-)

【讨论】:

    【解决方案2】:

    您在问题中列出的这些命令的问题在于,您可能知道,它们都在本地分支上运行。您可以重写本地 git 存储库以删除有问题的文件,但这会使远程存储库保持不变。

    这就是您的问题:您如何编辑远程存储库,而不会弄乱从该远程存储库中提取的其他用户。

    很遗憾,这是无法做到的。 git 存储库中的每个提交都建立在以前的提交之上,并取决于该提交的内容。因此,即使是在历史记录中某处有微小更改的情况下重写一个提交,也意味着对它之后的所有提交进行更改。

    这不会是一个大问题,除了克隆该远程存储库的每个人都有自己的该存储库副本,并且如果您更改远程上的一系列提交,那么他们所拥有的将不再匹配在遥控器上。我相信其他人可以对这种情况下发生的情况给出更技术性的描述,但我只想说这会破坏其他 16 个开发人员的本地副本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-20
      • 2012-04-04
      • 2012-04-06
      • 2013-08-09
      • 2014-11-25
      • 2014-05-05
      • 2016-03-13
      • 2015-01-18
      相关资源
      最近更新 更多