停止git历史记录,然后稍后重新添加

停止git历史记录,然后稍后重新添加,git,github,version-control,Git,Github,Version Control,我被带到一个以前不在版本控制中的项目中进行版本控制 没有提前考虑,我将所有文件添加到存储库中,并在开始工作时立即开始跟踪它 现在,存储库是巨大的,太大了,无法推送到git hub。所以我开始删除所有多余的文件,并使用git filter branch使用这个命令从历史记录中删除它们 sudo git log --all --pretty=format: --name-only --diff-filter=D | sort -u | while read -r line; do sudo git

我被带到一个以前不在版本控制中的项目中进行版本控制

没有提前考虑,我将所有文件添加到存储库中,并在开始工作时立即开始跟踪它

现在,存储库是巨大的,太大了,无法推送到git hub。所以我开始删除所有多余的文件,并使用git filter branch使用这个命令从历史记录中删除它们

sudo git log --all --pretty=format: --name-only --diff-filter=D | sort -u | while read -r line; do sudo git filter-branch -f --tree-filter "rm -rf { $line }" HEAD; done
问题出在哪里?有太多过多的文件,这需要很长时间,弥赛亚可能会在完成之前返回,我需要尽快将其发送到github

因此,加快这个过程,我发现我可以提交孤儿分支中的最新文件

git checkout --orphan <new-branch-name>
变成

1-----10-1a------Xa
或者可能

1------10------Xa
因此,最终我们保存了所有的历史

这可能吗?我正处于时间紧迫的时期,不想失去一切。

这不可能如前所述,因为提交的ID(“真实名称”)是它的哈希校验和,其中包括它的所有历史记录。因此,在包含两个分支机构五项承诺的回购协议中:

A--B--C--D   <-- with-big-files

         D'  <-- cleaned
然后合并:


A--B--C--D所说的“过多的文件”,你是指大的二进制文件吗?是的,大部分是,但也有一些代码文件。所有的文件都被删除了,只是没有从存储库中删除,而过滤器分支将永远消失——这是有价值的地方,但问题是你从一开始就践踏了代码库中存在的内容。你能找出主要的尺寸是从哪里来的吗?这可能会缓解吗?我很难简单地建议你改变历史,而不花时间去评估它的深远影响。如果在D'和E'之间我对代码进行了更改,合并A'-B'-C'不会实际回滚我对代码所做的任何更改吗?因为它会将以前的版本视为最新版本吗,不,是的。诀窍在于如何使合并提交。特别是,您可能希望运行
git merge--no commit
,而不考虑任何其他策略参数。然后,您可以随意操作工作树,
git add
文件以生成所需的结果,以及
git commit
合并。总的来说,我不会特别推荐在一开始就把它作为一个合并,但是你的处境很糟糕,处理它的大多数答案也很糟糕;您可以选择丑陋的选项X、Y和Z,我只是添加了另一个选项。:-)
A--B--C--D   <-- with-big-files

         D'  <-- cleaned
A--B--C--D   <-- with-big-files

         D'     <-- cleaned

           A'-B'-C'   <-- cleaned2
A--B--C--D   <-- with-big-files

         D'---------E   <-- cleaned
                   /
           A'-B'-C'    <-- cleaned2