问题标签 [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.
git - 跨多个分支的 Git 交互式变基
我有一个 git 存储库,其中包含一些我希望删除的敏感内容的源文件(我不想删除该文件,只需修改其内容)。提交是在项目开发的早期(当时我们只有一个分支),但现在在 n 个其他分支中找到了它自己。
是否有任何 git-fu 我可以在所有分支中运行来清理它?交互式变基一次只能工作一个 Head。
我确实在 github 上找到了这个命令:
但它只适用于删除,而不是修改。
git - git filter-branch 从我的仓库中删除所有子模块
您好,我已经成功重写了历史记录,并获得了我想要提取的 5 个文件夹git filter-branch -f --prune-empty --tree-filter 'rm -rf <all unwanted dirs>'
并保留了所有 git 历史记录。
唯一剩下的问题是子模块,我仍然有提交做
Subproject commit <hash>
我想从我的 git 历史记录中完全删除所有这些子模块提交,我该如何完成呢?
git - Git:如何编辑具有多个后代分支的旧提交?
我的 git repo 的历史看起来像:
所以我做了
并在编辑器中替换pick
为edit
commit_4 。我更正了变量名中的一些拼写错误,然后
现在历史看起来像:
我想让我的历史像以前一样直截了当。我尝试了我之前多次成功使用的方式
但是在应用第一个补丁时会发生冲突。我手动解决了它们。但是当我尝试时git rebase --continue
,它告诉我“没有什么可提交的”。
如何处理这个问题,为什么会出现?
git - 如何通过非交互方式压缩除最近提交之外的所有提交来减少臃肿的 Git 存储库的大小?
我的 Git 存储库有数百 GB 的数据,比如数据库备份,所以我正在尝试删除旧的、过时的备份,因为它们使一切变得更大、更慢。所以我自然需要快速的东西;越快越好。
我如何压缩(或只是简单地删除)除了最近的提交之外的所有提交,并且不必在交互式 rebase中手动压缩每个提交?具体来说,我不想使用
例如,我有这些提交:
我想要的是这个(将所有内容压缩到之间A
):H
A
甚至这也可以正常工作:
有一个关于如何压缩所有提交的答案,但我想保留一些最近的提交。我也不想压缩最近的提交。(特别是我需要保持前两个提交从顶部开始计数。)
(编辑,几年后。这个问题的正确答案是使用正确的工具来完成这项工作。Git 不是存储备份的好工具,无论它多么方便。有更好的工具。)
git - 如何使用 BFG repo 清理器删除一个文件夹/目录?
如何使用 BFG 只删除一个目录?
帮助说:
delete folders with the specified names (eg '.svn', '*-tmp' - matches on folder name, not path within repo)
这似乎意味着--delete-folders "config"
它将匹配存储库中任何位置的所有名为 config 的文件夹。
git - 我可以在 git filter-branch 期间使用我的存储库吗
我将一些大的二进制文件签入到 git 存储库中。我注意到它变得非常缓慢。最多 4-5 秒响应git status .
根目录中的一个。所以我决定用git filter-branch --tree-filter "rm -f web/libs/*.*jar" HEAD
类似的命令清理存储库。但它们最多需要几个小时才能完成。
当这些命令正在运行时,我还能使用我的存储库吗?
git - 无效 BFG 使用后 Git 合并重复
我对整个存储库(仅由我使用)感到非常厌烦,并且可以使用一些帮助来整理它。
这就是我所做的。我意识到在我的提交历史中,有一些文件包含我不想随便放置的凭据。因此,我决定合法并尝试使用 BFG Repo-Cleaner 来解决这些问题。我将所有凭据都放入 .gitignores 中,然后继续尝试将它们从历史记录中删除。根据文档说明,我执行了以下命令:
此时,BFG 告诉我已经找到并删除了 x 个文件。甜的。
根据终端日志,它更新了 repo。到目前为止一切顺利,对吧?我进入我的 github 帐户,单击几下后,在我的历史记录中找到仍然存在的凭据、文件和所有内容。我回去尝试相同的命令集,但使用这一行而不是文件删除器:
其中 passwords.txt 是一个文件,其中包含我想要的所有凭据的字符串实例。同样,BFG 日志表明它已经修复了几个实例。我向上推,检查,证书还在,坐在 Github 上。我注意到我所有提交的 SHA-1 密钥都已更改,所以大概 BFG 做了一些事情,而不是我想要它做的事情。
在这一点上,我放弃并尝试重新开始工作,我想我稍后会解决它。我做了一些工作,尝试向上推,得到一个奇怪的合并冲突(你在提交时领先 50 和落后 50)。什么?我尝试拉取和合并,突然间,我的 git 历史记录中的每一个提交都在名称上重复,其中一些只是空白。我检查了我的 Github 网络图,看起来从我的初始提交开始有第二个分支,它完全反映了我上次提交时压缩的所有提交(我从未分支过,只是一直在线性增长)。
我无法恢复到以前的提交,因为它们都是按时间顺序重复的。我的凭证仍然在那里,现在有两倍多的实例,我的历史翻了一番,而且很难理解。当我现在尝试从头开始运行 BFG,重新克隆和镜像 repo 时,它告诉我其中没有凭据,尽管我可以在 Github 中看到它们。我真的可以使用一些帮助来理解发生了什么,以及如何(如果有的话)再次回到原来的状态。
我正在考虑删除整个回购并重新开始。我真的不想那样做。
tldr; 尝试使用 BFG,以某种方式复制了我的 repo 中所有提交的半生不熟的版本,无法解开,并且雪上加霜,BFG 什么也没做,并声称它已经完成了它的工作。
git - 通过删除除“foo”和“bar”之外的所有文件重写 git 存储库历史记录
我想删除 git 存储库历史记录中既不是“foo”也不是“bar”的所有文件。鉴于这rm -rf !(foo|bar)
适用于删除当前目录中既不是“foo”也不是“bar”的文件。我想出了以下想法:
$ git filter-branch --tree-filter 'rm -rf !(foo|bar)' --prune-empty HEAD
但是,这产生了以下错误,我真的不明白为什么它不起作用。
Rewrite 75c1ec1ef083338ca2e88db9cc6107c1630d91e9 (1/871)~/libexec/git-core/git-filter-branch: 1: eval: Syntax error: "(" unexpected
git - 修剪旧的 Git 提交而不使用变基
假设我有一个 Git 存储库,其中包含巨大的树(~60 GiB)和一些历史记录,其中旧版本包含许多已删除的文件。
我现在想修剪旧的历史,但不要 rebase
在修剪点之后进行所有提交,因为每次提交都需要几个小时。
我可以只删除第一个要删除的提交对象,并希望
git gc
删除所有(现在未引用的)旧的吗?还是会因为缺少对象而引起恐慌?我可以
git replace
用虚拟提交替换我想要删除的第一个提交,然后调用git gc
吗?还有其他方法可以就地删除我的旧提交吗?
git - 当合并提交妨碍时如何避免变基地狱?
我的 git 树中有以下情况:
我想 rebase 和 squash 功能中的所有内容,以便我可以通过一次提交添加的功能来推进 master。
由于提交 7 已经是解决所有冲突的合并,因此我尝试了以下操作:
这里给我的唯一选项是提交 7、8 和 9。“有道理”,我想,“因为合并已经包含 5 和 6,它们可以被丢弃”。我继续在一次提交中压缩 7、8 和 9,我们称之为“789”。(我知道,我是创意型的。)
在此之后,我的树看起来像这样:
5 和 6 在同一个分支中的存在让我感到困惑,但同样,由于它们已经包含在 7 中(现在在 789 中),我可以丢弃它们。
所以我git rebase -i master
又一次,这次我丢弃了 5 和 6。
但是,这里和那里发生了冲突,所以我放弃了整个事情。
我目前处于那个阶段,但我的远程分支尚未更新,所以我不妨重置为原始状态。
哪些是正确的步骤,可以让我到达我想要的位置,而无需手动解决所有合并冲突?