GIt:使用BFG从存储库中删除了几个文件,并且存在巨大的提交差异

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GIt:使用BFG从存储库中删除了几个文件,并且存在巨大的提交差异相关的知识,希望对你有一定的参考价值。

我最近使用BFG - 删除文件从存储库中删除了几个大文件,输出似乎是我所期望的。报告的正确文件和大小已从回购中删除,并且本地大小反映了这些删除。

但是,当我上传并与master进行比较时,它会报告存在巨大差异并且会影响数百次提交。我不知道该怎么做或如何理解它;经历太多了。我知道删除文件会重新构建仓库,但我怎么能确定diff中实际发生了什么?

答案

这取决于所有这些文件中所见的差异的性质。

例如,如果它们是EOL差异(行尾),这可能意味着BFG提交重写过程是在本地使用config core.autocrlf完成的,它可能会更改所有文件的eol(除了删除一些他们)。 一旦推送,所有其他文件将显示为“不同”。

另一答案

它是由java -jar bfg.war --delete-files filename引起的,它将从所有分支的整个提交历史中删除指定的文件,但是只将一个分支推送到远程。

在使用BFG删除文件之前,假设提交历史如下:

…---A---B---C---D  master, origin/master
         
          E---F  mybranch, origin/mybranch

当你比较master分支与mybranch时,相关的提交是CDEF

并假设删除文件是test.txt,它只存在于commit BE中。当你执行

java -jar bfg.war --delete-files test.txt

提交历史记录将是:

…---A---B'---C'---D'  master, origin/master
         
          E'---F'  mybranch, origin/mybranch

注意:它不仅重写了本地分支(mastermybranch)的提交,还重新指向跟踪分支(origin/masterorigin/mybranch)。

如果你在那之后做了git fetch,你会发现当地分支机构的跟踪分支是分歧的:

        E---F    origin/mybranch
       /
      B---C---D  origin/master
     /     
…---A---B'---C'---D'  master
         
          E'---F'  mybranch

如果你只强制将mybranch推送到远程仓库(而不是强制推送master分支),那么远程仓库的提交历史将是:

      B---C---D  master
     /     
…---A---B'---E'---F'  mybranch

所以当你再次比较mybranchmaster分支时,相关提交将包含BCDB'E'F'

如果您还强制将本地qazxsw point分支推送到远程,则在使用BFG进行比较时,相关提交的计数应该相同。

以上是关于GIt:使用BFG从存储库中删除了几个文件,并且存在巨大的提交差异的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Git 存储库中删除文件?

无效 BFG 使用后 Git 合并重复

从GIT历史记录中删除文件

如何从暂存区域中删除单个文件(撤消 git add)?

从 Git 历史记录中删除大文件

如何从 Git 中的未暂存更改中删除说“旧模式 100755 新模式 100644”的文件?