问题标签 [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 回答
1217 浏览

git - 重写 git 历史记录替换每个文件中的一个单词

我想用 git-filter-branch 重写我的存储库的 git 历史记录,以将所有文件中所有出现的“foo.bar”替换为“bar.foo”。

我怎样才能做到这一点?

更新:
我一直在玩 --tree-filter 参数,我已经能够用这个替换指定文件中的单词:

这似乎是我能达到的最接近的目标。

0 投票
1 回答
91 浏览

git - Split git repository while preserving and scoping-down branches

There are numerous tutorials on how to split a large git repository (LargeRepo) into smaller repositories (SmallRepoA, SmallRepoB) and preserve commits. I'd like to do that with the added requirement that each SmallRepo inherits only those branches and branch commits that are relevant to the files in the SmallRepo.

For each SmallRepo:

  1. Don't maintain a branch if the branch has no affect on the files in SmallRepo
  2. For the remaining branches, remove commits that have no affect on the files in SmallRepo.

Effectively, I'm trying to get the end result to micmic what the world would look like if I had the individual SmallRepos to begin with.

Here's an example:

Lets say LargeRepo looks like this:

#xA;

And I want to split into three SmallRepos, one for each high-level Folder.

#xA;

Lets say LargeRepo had Branch1 and Branch23. Branch1 made changes to files in Folder1, Branch23 made changes to files in Folder2 and Folder3.

The branch view would look like this:

#xA;

Ideally the solution can be implemented with the git command-line on Windows and would not involve BASH.

0 投票
4 回答
1294 浏览

git - Git 问题 - 内存不足,malloc 失败。需要使用 filter-branch 或类似的方式修改 repo

我在树莓派上使用私人托管的 git 存储库来存储我所有的学校作业。我这样做是为了帮助我熟悉 Git,并在一般情况下运行 linux 服务器。一切正常,直到昨晚我收到一条错误消息,内容如下:

我假设这里的实际问题是服务器只是内存不足。我检查了我的 repo 的大小,它超过了 300mb。这是因为作为一个新用户,我没有意识到上传诸如 Visual Studio、Eclipse 和 Netbeans 临时用户文件之类的东西是一件坏事。我知道如何为当前和未来的提交删除这些文件 - 但我一直很难尝试从存储库中完全删除这些文件。谷歌帮助我挖掘的所有过滤器分支方法似乎只适用于几个文件。我需要批量删除许多文件,并且当它在给定目录中找不到单个文件时,我需要它不要抱怨我。

所以我的问题是,有没有一种合理的方法来做我所要求的?或者在我的情况下,只是丢失我的提交消息历史记录,并从第一天开始安全地启动所有 .gitignore 文件的新存储库会更容易吗?

0 投票
1 回答
118 浏览

git - Git 提交未推送

我有一个从远程克隆的本地存储库。我从中进行了许多提交,但愚蠢地删除了该存储库而没有推回远程存储库。我以某种方式设法恢复了目录。现在我想知道提交是否也会随着恢复而恢复?

0 投票
1 回答
177 浏览

git - 将 2 个分支合并为一个分支

在 GIT 中,我在单个存储库中有两个分支 - 分支“A”和分支“B”(从旧 SVN 存储库中的两个文件夹创建)

这些分支是完全分离的:它们没有共同的祖先。

这些分支中的每一个都写入不同的目录。例如:分支 A 仅写入目录“~/A”,分支 B 仅写入目录“~/B”(因此没有冲突)。

我想将这两个分支合并到一个分支中,这样它看起来就像一个分支存储库。

我努力了:

  • git merge - 它将合并分支,但在历史记录中,两个分支都是可见的
  • git rebase - 它可以工作,但提交顺序错误 - 我希望提交按时间排序

最好的方法是从两个分支中获取所有更改,按时间排序,并在某个新分支上逐一“重播”。但我不知道该怎么做。

感谢您的回答!

编辑:这就是现在的样子(按时间从左到右):

0 投票
1 回答
240 浏览

git - 如何重写 Git 历史记录以撤消压缩的合并提交?

我一直在从事一个最近从 Subversion 迁移到 Git 的项目。git-svn在迁移之前,我一直致力于 Subversion 存储库。迁移之后,我注意到相当多的历史记录已经丢失,因为我从主题分支中的每个合并提交都被压缩(通过git-svn桥接或由于迁移),丢失了一些我想保留的提交消息。是否可以使用我的迁移前存储库的本地副本来取消迁移后存储库中的合并提交,也许是通过诸如樱桃采摘之类的方法?

0 投票
4 回答
3901 浏览

git - 使用 BFG repo-cleaner 后检查 git repo

非常基本的 git 问题:

我向 Github 上传了一些有危害的信息,并正在使用 bfg 来清理 repo。我遵循了文档并执行了以下操作:

我收到以下输出:

我想查看是否已从我的仓库中清除了私人信息,但我不确定如何检查镜像仓库中的文件。有任何想法吗?

0 投票
4 回答
511 浏览

git - 从 github 中删除文件

一段时间以来,我一直在将 github 用于一个项目,但仅作为问题跟踪器。所以,今晚我也花了一些时间来处理代码,并犯了一个新手错误:我提交了凭证文件和其他不必要的数据。我现在已将它们添加到.gitignore文件中,它们应该不再是问题,但我看到它们在历史记录中可用。

这带来了一个安全问题,所以我必须解决这个问题并删除那里的敏感数据。我是目前唯一的开发人员,所以这就是为什么我只将代码保留在我的 PC 和实际服务器上,但也想掌握这一点。

到目前为止,我已经尝试了这篇文章,也尝试了这篇文章,发现了一些关于 SO 的问题,但一直无法弄清楚。我大多会遇到这样的错误:fatal: ambiguous argument 'rm': unknown revision or path not in the working tree.

我会删除整个 repo,但是那里有很多问题跟踪数据,所以我需要保留它,所以这不是一个选项。我不介意其他提交,我可以从本地机器上的代码从头开始,但需要一些方法来丢失旧提交及其完整历史记录,或更改这些文件(有些东西.gitignore是目录,所以这可能非常删除繁琐)。

我尝试使用git rebase -i,但在那里我只看到我的最后三个提交(测试),它们没有被推送,其余的在线提交,其中有 10 个左右没有显示在那里。

我使用的 repo 是私有的,我和一个客户只能访问,所以没有第 3 方看到这个。

我是 git 新手,所以感谢您的时间和帮助!

0 投票
1 回答
7329 浏览

git-rewrite-history - 从特定路径中删除文件名?

我一直在玩 BFG Repo-Cleaner 工具,以便通过从目录层次结构中的多个位置删除(临时/大)文件来清理 git repo 的历史......

即 /root/test/a.txt /root/test2/a.txt

现在我想删除“test/a.txt”的所有引用,但保留/test2/a.txt 版本..

有什么方法可以使用 BFG 彻底删除它?(如https://help.github.com/articles/remove-sensitive-data所述)

由于回购具有相当大的历史(10K 提交)BFG 确实比我迄今为止看到的其他方法快很多......

0 投票
2 回答
607 浏览

git - 删除不在子树或原始存储库中的提交

我实际上有两个存储库:

  • main
  • external

一段时间后,main存储库被合并到external/main目录中(作为子树)。现在我想将所做的更改迁移external/mainmain存储库,但只有这些提交,没有其他不相关的提交喜欢external/<anything-else>.

我实际上已经尝试过经典:

但这也会删除对初始main存储库所做的所有提交,只留下在externalgit 存储库中所做的提交。


所以:如何只保留提交:

a) 制作到初始main存储库

b) 生成external( external/main)的子树


当我尝试git pull -s subtree ../external时,所有提交都被合并,包括未更改子树中任何内容的提交。我只想拥有在子树中实际更改某些内容的提交,并且也只有有关子树中文件的信息。