问题标签 [git-rewrite-history]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
276 浏览

git - 从 git repo 中完全删除文件(从某个时间点开始)

我有一个大约 2030 次提交的仓库。在提交 2000 左右,一个文件被修改,导致它的大小意外地从大约 20M 变为 1.2 GB。是否可以重写历史记录以删除此文件,但只能从提交 2000 中删除?(我不想丢失此文件的先前历史记录)

我在想 git-filter-branch,但看不到一种方法来告诉它“来自提交” - 有可能吗?

干杯迈克

0 投票
4 回答
9141 浏览

git - 从存储库历史记录中删除大文件后,Git 存储库仍然很大

我有一个(直到现在)使用 git 来存储其依赖项的代码库。存储库本身可在此处获得(警告:它非常庞大)。不用说,我需要从存储库历史记录中删除依赖项,以便将其缩减到合理的大小。

我首先使用David Underhill 的说明lib从历史记录中删除该目录。然而,即使在这样做之后,存储库仍然超过 300M。发行git prunegit repack帮助,但仍然超过180M。

为了找到任何臃肿的斑点,我发出了

这些结果:

105526b5d3d398b9989d88c2f9fc2d1dc96a85b8斑点35685609 33600527 31978828 d296935e6ac5f3f58b50c789394c9769116e9c34团块35658016 33593241 112485744 50636f931180a32764edadd854968a971a083f8a团块28360290 25897864 233390 b9e4dd37428e879a258f297b7f5bcfb9ba869695团块13108002 11640713 66661788 08d2720b2414aa07ce419b17d5f80c333c7313b7团块12551621 11124009 89231035 6197a478a461275a0396f20c28487e9ae619a5f9团块11975135 11058259 148211988 1 50636f931180a32764edadd854968a971a083f8a 549eb0c73776fd0ede27a2fcb03366f76f45a13c团块9136086 8166649 166451273 5bc0a0f04a7004bc16cfab1c091c6b369fb74049团块9072616 8270262 80951514 741480238a6a6ce612cf089245dd46d6890fba9f团块8858569 8080252 101294029 744226651c55b14c1aa8affb78fba4fdf02b577c团块7412220 6766404 186825167

这就是我卡住的地方。我可以git show看到这些 blob 并看到它们看起来非常像 jar 文件,但我无法弄清楚为什么它们仍在 repo 中。

各种查找文件名的尝试都失败了。

git repack -a, git repack -ad, 和git repack -Ad所有似乎都没有效果。

0 投票
3 回答
25538 浏览

git - git,所有分支上的过滤器分支

我正在使用以下来源从我的存储库中删除一些大文件和目录:

http://dound.com/2009/04/git-forever-remove-files-or-folders-from-history/

为什么我的 git 仓库这么大?

git filter-branch似乎只适用于当前分支 - 有没有办法一次将它应用于所有分支?

0 投票
5 回答
1695 浏览

git - git:找不到 blob - 想从包中删除它

我有一个大斑点,我想摆脱它!我以为我使用此解决方案删除了​​文件:http: //dound.com/2009/04/git-forever-remove-files-or-folders-from-history/ (我使用-- --all而不是HEAD删除文件来自所有分支机构)

我已经通过这个查看了 pack 文件夹为什么我的 git 存储库这么大?

脚本git-find-blob取自哪个提交有这个 blob?

但它什么也没找到。

任何想法如何从我的存储库中摆脱它?

0 投票
3 回答
46326 浏览

git - 在 filter-branch --tree-filter 之后从 git repo 中删除 refs/original/heads/master?

我在这里提出了同样的问题:New git repository in root directory to subsume an existing repository in a sub-directory

我在这里遵循了这个答案:New git repository in root directory to subsume an existing repository in a sub-directory

现在,gitk --all显示了两个历史:一个在 currentmaster中达到高潮,另一个在original/refs/heads/master.

我不知道这第二个历史是什么,或者如何从回购中删除它。我的存储库中不需要两个历史记录。

我该如何摆脱它?

要复制自己:

现在我们遇到了原始海报的问题。让我们使用上面链接的答案将 git repo 的根目录移动到 project-root :

现在,看看我目前的问题:

我如何摆脱refs/original/heads/master所有相关的历史记录?

0 投票
3 回答
74908 浏览

git - 如何删除在 git 中错误提交的大文件

可能重复:
如何从 Git 的提交历史中清除一个大文件?

我做了一件愚蠢的事。想象一下,我提交了一个 100MB 的文件。然后我看到这个并删除这个文件并再次提交。这是删除文件的正常过程。

但是现在副作用是我的历史很重,因为它保存了这个大文件(我相信这就是它很重的原因)。我只使用本地 git,所以我不在任何服务器上同步。

如何明确删除此文件并节省磁盘空间?

0 投票
6 回答
141570 浏览

git - 如何修改旧的 Git 提交?

我做了 3 次 git 提交,但没有被推送。如何修改不是最新版本的旧版本 (ddc6859af44) 和 (47175e84c)?

0 投票
5 回答
4860 浏览

git - 如何向旧的 git 提交添加额外的父级?

我有一个包含两个分支的项目:master 和 gh-pages。它们本质上是两个不同的项目,其中 gh-pages 项目依赖于主项目(反之亦然)。将其视为“master 包含源代码,gh-pages 包含从这些源文件构建的二进制文件”。定期地,我采用 master 中累积的更改,并使用提交消息“与 master commit xxxxxxxx 保持一致”对 gh-pages 分支进行新的提交。

网络图当前的样子

这样做一段时间后,我意识到如果 gh-pages 提交“与主提交 xxxxxxxx 保持一致”实际上在 git 存储库中将 xxxxxxxx 作为其父级,那就太好了。像这样(糟糕的 MSPaint 艺术):

理想的样子

有没有办法让存储库看起来像上面的第二张图片?我知道如何按照这种模式进行新提交:我可以执行“git merge -s ours master”(设置其他空提交的父级),然后执行“git commit --amend adv550.z8”(其中 adv550.z8是实际发生变化的二进制文件)。但是 git 是否可以很容易地回到过去并将新的父母添加到旧的提交中?

一旦我的本地存储库看起来正确,我非常愿意“git push -f”并删除我的 Github 存储库的当前历史。问题是,我可以让我的本地仓库看起来正确吗?


多年后编辑添加:我最终放弃了让 git 历史gh-pages看起来像这样的尝试;我认为零增益工作量太大。我的新做法是积极地将提交压缩到gh-pages,因为在我的情况下保存这些提交消息真的无关紧要。(这只是一长串“与主提交保持一致......”,其中没有一个在历史上很有趣。)但是,如果我需要再次这样做,我会听那些说的答案

0 投票
1 回答
1441 浏览

performance - 如何优化 git update-index?

我有一个相当大的存储库(11 GB,900,000+ 个文件),并且在合理的时间内无法进行迭代。经过一番分析,真正的瓶颈似乎是 git update-index:

这使得获取文件列表的天数令人难以忍受。有什么方法可以加快更新索引操作吗?

对于它的价值,我在 Windows 7 上运行 cygwin。

编辑:为这个问题提供更多背景信息。

大型存储库来自 SVN 导入,并且包含许多不应在存储库中的二进制文件。但是,我想保留提交历史记录和提交日志。为了做到这一点,我试图用文件哈希替换二进制文件的内容,这应该压缩存储库并允许我保留历史记录。

0 投票
4 回答
2759 浏览

git - 真正扁平化一个 git merge

StackOverflow 上几乎没有关于“扁平化合并”的问题,答案通常是“git rebase”。这些答案虽然错过了一个关键点——提交的顺序。

假设有一个分支 A 的提交时间为 6 月 1 日和 8 月 1 日,分支 B 的提交时间为 7 月 1 日(更新以恢复下面描述的用例:分支是完全独立的并且没有共同的祖先,例如来自 2 个不同的存储库)。将 B 合并到 A 时,将有以下历史记录(每个 git log):

现在,我正在寻找的是获得相同结果的方法,但没有合并提交(因此具有该顺序的基础线性历史,是的,这意味着重新提交提交)。git rebase 在这里没有帮助,就像它一样,您将获得以下历史记录:

或者

换句话说, git rebase 总是将一个分支堆叠在另一个分支之上,而我正在寻找能够散布按作者的提交日期排序的提交的解决方案。

显然,对于简单的情况,可以通过使用 git rebase -i 手动对 git rebase 进行后处理来实现所需的安排,但这对于大型历史来说并不实用,所以我正在寻找自动命令/脚本。

用例?如果 A 和 B 代表同一项目的不同部分,恰好位于不同的 repos 中,并且时间已经通过将它们合并在一起来纠正这一点,那么自然希望线性历史按照实际的发展顺序展开。