问题标签 [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 投票
1 回答
9683 浏览

git - 带有索引过滤器的 Git 过滤器分支不起作用并按预期删除目录

主分支中 Git repo foo 的结构

在其他分支机构refs/可能在很多其他地方

目标

从 Git(历史)环境中删除目录引用(及其内容)的所有实例:使用 Git Bash 的 Windows 7

删除 refs(Git 不参与,尝试这个只是为了看看它自己工作)

成功,所有refs/及其内容都被删除(如果我不使用-depth,find会报错,即使正确删除了dirs也不存在)。

从 Git 中删除 refs

通过重写 Git 历史记录从 Git 中删除目录引用

如图所示(认为temp/aas temp/foo),该命令运行并重写所有提交,但没有refs/被删除,因此 find 的输出不会filter-branch --index-filter按预期返回。

类似的事情似乎对其他人有用。
我错过了什么?

PS。是的,我已经阅读了数百篇关于此的帖子、文章等几个小时,但无论如何它对我不起作用。

0 投票
3 回答
867 浏览

git - 重写 Git repo 历史后,旧的提交历史仍然可见

我已经使用git 有效地重写(rebase -i)很多历史来替换Git 存储库的整个提交历史的文件文本(Copyright <author>to )。Copyright <company>它可以工作,但的提交历史仍然可见

在下面的屏幕截图中,蓝色分支中的“新”历史位于紫色分支中不需要的“旧”历史之后。如何摆脱“旧”历史?(为什么它不“合并”成一个连续的历史让我感到震惊!

在 <code>git filter-branch</code> 命令之后

0 投票
1 回答
7233 浏览

git - Git 存储库太大

我有一个项目,其中包含约 12MB 的代码和资产。我一直在使用 Git 跟踪它,只是注意到我的.git文件夹现在刚刚超过 1.83GB。它由几个小文件组成,然后只有一个包文件构成了大约 1.82GB 的文件夹。

我已经跑了git gc --aggressivegit gc --prune。它的大小相同。我试过了:

但它仍然是相同的大小。我什至克隆了它(一次在本地强制重新打包,然后再次从 Git),但每个仍然是 1.83GB。这正常吗?有什么办法可以减少它的大小,还是我只是开始一个新的仓库,复制代码,并接受我过去的提交将会消失?

0 投票
2 回答
7504 浏览

git - 为什么我的 .git 文件很大?

我不小心在 git 目录中添加并提交了一些非常大 (100MB+) 的 PSD 文件。当它们在目录中时,我对这些文件进行了一堆编辑,但后来意识到它们不应该在那里并将它们从目录中删除。

然后我跑了:

我目录中的文件现在加起来不到十几个 MB,但 .git 文件本身除外,它是 700MB+。

这里发生了什么?它是否保留已删除 .PSD 文件的旧版本?这是否意味着 git 永远不会清除从删除文件中获得的空间?我如何让它完全忘记这些文件,以便我可以降低 .git 文件的大小?

0 投票
1 回答
2225 浏览

git - 从历史记录中删除不需要的文件,包括所有带有 filter-branch 的 refs

我最近克隆了一个 SVN 存储库,它曾经有一些二进制文件,现在不再需要了。不幸的是,我已经将它推送到了 Github,其中包含二进制文件。我现在想使用 'git filter-branch' 删除这些,但在标签和分支方面我遇到了一些问题。

基本上,我创建了一个简单的 shell 脚本来删除由以下命令确定的文件列表:

删除脚本如下所示:

我有几个标签(都在 .git/packed-refs 中列出),一个 .git/refs/remotes/origin (指向 Github 存储库)。使用上述脚本删除文件没有想要的效果('du -cm' 仍然输出相同的大小;'git rev-list' 仍然列出文件),直到我手动从 .git/packed 中删除所有引用-refs 和 .git/refs/remotes/origin 目录。

自然地,我失去了所有标签以及使用这种方法将我的本地更改推回 Github 的可能性。有什么我错过的,或者有没有其他方法可以在不破坏我的历史记录的情况下从所有分支/标签中删除文件?

非常感谢,马蒂斯

0 投票
4 回答
1813 浏览

git - 如何将 Git 存储库组合成线性历史?

我有两个 git 存储库R1R2,其中包含来自产品开发的两个时期的提交:1995-1997 和 1999-2013。(我通过将现有的 RCS 和 CVS 存储库转换为 Git 来创建它们。)

如何将两个存储库组合成一个包含项目线性历史准确视图的存储库?

请注意,已添加、删除和重命名了 betweenR1和文件。R2

我尝试创建一个空存储库,然后将它们的内容合并到其中。

但是,这会保留在 revisionD中但不在 revision 中的文件K。我可以制作一个合成提交来删除合并之间的额外文件,但这对我来说似乎不优雅。此外,通过这种方法,最终结果包含实际上并未发生的合并。

0 投票
1 回答
1265 浏览

git - 如何在所有 git 消息提交中更改特定字符串?

我想在推送到 Github 的所有消息中对特定字符串进行 grep 和更改。是否可以?如何?我知道如何更改最后一条消息git commit --amend,但我想更改所有提交的所有消息。

0 投票
2 回答
2278 浏览

git - 如何恢复 git 历史重写?

我正在重写一个相当大的回购的历史,git filter-branch --tree-filter这需要几个小时。我看到 git 正在使用一个临时目录来存储它的中间工作。这是否意味着如果它被中断可以恢复重写?如果是这样,怎么做?

编辑

我正在做的操作是移动几个目录。这些当前位于子目录中,但我现在需要它们位于根目录中。

例如

变成

当然,我的目录结构比这复杂得多,但这就是我想要做的事情的要点。

0 投票
2 回答
2775 浏览

git - 如何删除 git 中一个文件的历史记录,只保留最新版本?

我在 git 存储库中有一个大型二进制文件,在几次提交中已更改。这些提交还包括对其他文件的更改。我希望存储库中只有最新版本的二进制文件,但希望保留在这些提交中更改的其他文件的历史记录。

所有有问题的提交都已经被推送到 github,并被团队的其他成员从他们那里拉出来。

我怎样才能做到这一点?

编辑:我不相信这是另一个引用问题的重复。如下面评论中所述,我已经查看了该问题,但想删除文件的每个版本,除了最新版本。这个标准在另一个问题的答案中没有提到。

0 投票
2 回答
9950 浏览

git - 在合并之前修改 Git 提交的消息

在合并到远程分支之前,我提交了一些测试代码。这次合并有很多冲突,并且花了一些时间来纠正。所以我的历史看起来像这样:

测试代码很好,我真的只是想更改提交消息。通常我会直接使用 a git rebase -i f3e71c2^(因为这些都还没有被推动),但我的一位同事告诉我这会搞砸合并。我真的不想搞砸合并:)

我的同事说的对吗?如果是这样,我能做些什么,还是我只需要忍受这段历史?