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

git - 使用 git rewrite 重新格式化整个代码库

我们有一个相当大的代码库,包含大约 60000 个提交。我们希望在保留 git 历史记录的同时重新格式化所有 .java 文件。因此,我们采用的方法是使用 git filter-branch --tree-filter 重新格式化整个代码库,同时保持历史记录不变。但是,有几个问题我无法找到答案。

  1. 当我应用 --tree-filter 并传递重新格式化根目录中所有 .java 文件的命令时,会发生重写,但最后,我会在暂存区看到所有 .java 文件。重写的每一步都需要提交还是自动发生?

  2. git filter-branch 似乎接受了一系列提交,这让我想知道是否可以在每次重写之前保存提交 ID,并在失败的情况下恢复。恢复很重要,因为整个过程可能需要几天才能完成(即使在强大的计算实例上)。

  3. 为了重新格式化整个代码库, --index-filter 会起作用吗?

更新:澄清

  • 代码库大约有 220 万行 Java 代码。不进行 git rewrite 会导致大约 10%-12% 的代码库被归因于错误的作者。那是大约 200K 行的 java 代码,这是我们想要避免的。Git rewrite 让它看起来像是做出改变的人做了正确的事情。
0 投票
1 回答
1090 浏览

git - Git使用过滤器分支“权限被拒绝”重写历史记录

当我尝试使用命令精简我的仓库时:

我在控制台中得到输出:

large_files.txt 只是包含要删除的文件列表的文本文件,我拥有它并拥有所有权限:

我确保 .git-rewrite 不在仓库中(已删除)并且强制标志没有帮助?

这到底是什么权限?文件系统权限、Git 远程权限还是其他?这是我的仓库,我可以完全访问它,用 sudo 尝试过,但没有任何帮助。顺便说一句: large_files.txt 只是带有要删除的文件列表的文本文件,

你能帮我理解我在这里想念什么吗?

0 投票
2 回答
239 浏览

git - 自动修复相同消息和作者(完整回购)的连续提交

我已经将一个大型 SVN 存储库迁移到 GIT,并且有大量的连续提交具有同一作者的相同消息。

现在我想自动将提交修复为一个提交。

想法?

0 投票
2 回答
148 浏览

git - git在分支合并后修复主题的正确方法

我是 Git 新手,目前我只使用本地存储库,但我最终会与其他开发人员分享我的工作。我试图弄清楚在将主题分支合并回主分支后修复代码的正确方法是什么。这是我所拥有的:

在此处输入图像描述

我的主题是在 C2 中的一个主题分支中实现的,然后在主分支上合并。对于另一个主题,master 上还有另一个提交 C5。现在我刚刚发现在 C2 中实现的功能存在问题。我应该在主题分支中将其修复为 C6,然后在主分支上再次合并吗?或者我应该摆脱主题分支,因为它已经合并并直接在主分支中修复它?

理想情况下,我希望将 C2 和 C6 保留在一次提交中,这样当我们实现远程存储库时,我可以推送干净的历史记录。但我认为我不能因为合并而压缩 C2 和 C6。有没有办法做到这一点?

合并后修复主题的最佳做法是什么?

0 投票
2 回答
2592 浏览

git - SVN 到 Git 迁移:仅导入某些分支和历史记录

我的团队正准备迁移到 Git,我们想从一个小型存储库开始。由于二进制文件和数百个版本分支,由 git-svn 创建的初始 Git 存储库大约有 10GB 大。

清理大文件很容易,棘手的部分似乎是分支的数量。

对于 git 迁移,我们希望从某个时间点 (X) 开始,只有某些(最新的)分支。 我们没有“主干”——而是在较长时间内维护的不同版本分支:

我很容易发现如何从历史记录中清除大块(BFG,git filter-branch)。

我的问题:

我们如何从历史记录中删除除少数特定分支之外的所有分支,以便我们在新存储库中只有分支“版本 3”?理想情况下,我们希望历史从创建此分支的开始提交开始:

有没有办法做到这一点git filter-branch或其他可能性?

0 投票
1 回答
263 浏览

git - 如何从 git 历史记录中删除多个分支来源的文件?

我有一个在多个分支的起源处提交的大文件。该文件后来被修改、移动或从分支中删除。问题是该文件对于 GitHub 来说太大了,所以我想从任何地方删除它(它的所有版本)。如何才能做到这一点?

我已经看到了修改包含此类文件的合并的方法(https://stackoverflow.com/a/308684/42973),或者从(显然)单个分支中删除文件的方法(https://stackoverflow. com/a/5563603/42973),但它们不适用于这种情况。

0 投票
3 回答
1380 浏览

git - 从 git 历史记录中删除未使用的资产

所以,我整个上午都在寻找正确的方法来做到这一点,而我只是不是那种精通命令行的人来解决这个问题。

我有一个 git repo,里面有很多资产。这就像大罪,我知道。

回购已经变得太大了。我想清理它,以便我可以以编程方式从回购的整个历史记录中删除 HEAD 中不再存在的所有文件。我已经看到了执行此操作的方法,您可以在其中指定文件路径,但实际上,我说的是已经从我们的最终产品中删除的 1000 多个文件,我真的不想再在我的存储库中拥有这些文件了。

更新: 我已经清理了所有原本不应该存在的资产的回购。我现在真的只有源代码和一些应该在那里的资产。我真的很想保留所有源代码的所有历史记录......所以我真的希望从历史记录中删除已删除的文件,同时保留当前存在的历史记录。这就是目标。我很确定可以使用它来完成git filter-branch- 但我只是不太了解它。

0 投票
1 回答
102 浏览

git - 在 Git 中转储二进制文件并恢复?

假设我在 git 存储库提交和推送中添加了 1 GB 电影。接下来我恢复我刚刚推送的提交并推送它。现在最新的头不再包含 1 GB 文件。

即使我刚刚恢复了提交,1 GB 文件现在永久成为 git 历史记录的一部分是否正确?这意味着即使我正在处理没有 1 GB 文件的最新磁头,repo 仍然大 1 GB 并且将永远保持不变?

0 投票
1 回答
104 浏览

git - 为 PSR 编码标准规范化整个 git 存储库

旁白

有一种方法可以标准化 git 存储库的行尾。如果您的存储库有各种行尾(Mac、Unix、Windows),它们有时可能会妨碍您。所以我之前所做的是使用git-filter-branch此处描述的方式将它们全部标准化为 Unix 样式的行尾:http: //blog.gyoshev.net/2013/08/normalizing-line-endings-in-git-repositories/

这样做并没有改变我的历史,从某种意义上说,这对于我的历史增量在任何重大方面被搞砸的地方都不是一个足够侵入性的改变。我仍然可以使用诸如blame找出谁更改了代码行之类的工具,或者git-bisect找出何时何地出了什么问题。

我现在想做什么

建议重新格式化整个代码库以使用符合 PSR 的格式。这意味着,重新格式化整个代码库并将其提交到存储库。git-blame类似的工具git-bisect可能会在此之后停止工作,都指向同一个符合 PSR 的提交。我不喜欢这样,因为它会抑制我开始享受的 git 的力量。

问题

当涉及到编码标准时,如何使我的整个存储库符合 PSR 标准,而不会破坏 git 电动工具,如git-bisectgit-blame

0 投票
1 回答
10037 浏览

git - 在 Visual Studio Online 中删除中间提交

我多次编辑了我的 README.md,因为我没有看到预览按钮。现在我的提交历史充满了无用的提交。

我可以删除其中的一些,或者至少隐藏它们吗?