问题标签 [git-filter-branch]

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 投票
12 回答
326261 浏览

git - 你如何修复一个错误的合并,并将你好的提交重播到一个固定的合并上?

几次提交前,我不小心将一个不需要的文件(filename.orig在解决合并时)提交到我的存储库,直到现在我才注意到它。我想从存储库历史记录中完全删除该文件。

是否可以重写filename.orig从未添加到存储库中的更改历史记录?

0 投票
26 回答
291367 浏览

git - 分离(移动)子目录到单独的 Git 存储库

我有一个Git存储库,其中包含许多子目录。现在我发现其中一个子目录与另一个无关,应该分离到一个单独的存储库。

如何在将文件历史记录保留在子目录中的同时做到这一点?

我想我可以制作一个克隆并删除每个克隆的不需要的部分,但我想这会在检查旧版本等时给我完整的树。这可能是可以接受的,但我更愿意假装两个存储库没有共享历史记录。

为了清楚起见,我有以下结构:

但我想要这个:

0 投票
40 回答
984783 浏览

git - 如何在 Git 中更改多个提交的作者和提交者姓名和电子邮件?

我正在学校计算机上编写一个简单的脚本,并将更改提交到 Git(在我的笔式驱动器中的一个存储库中,从我家的计算机克隆)。在几次提交之后,我意识到我是以 root 用户的身份提交的东西。

有没有办法将这些提交的作者更改为我的名字?

0 投票
11 回答
167658 浏览

git - 从 Git 历史记录中删除敏感文件及其提交

我想在 GitHub 上放置一个 Git 项目,但它包含某些带有敏感数据的文件(用户名和密码,例如 capistrano 的 /config/deploy.rb)。

我知道我可以将这些文件名添加到.gitignore,但这不会删除它们在 Git 中的历史记录。

我也不想通过删除 /.git 目录重新开始。

有没有办法删除Git 历史记录中特定文件的所有痕迹?

0 投票
4 回答
162347 浏览

git - 用 Git 更改项目的第一次提交?

我想在项目的第一次提交中更改某些内容,而不会丢失所有后续提交。有没有办法做到这一点?

我不小心在源代码的评论中列出了我的原始电子邮件,我想更改它,因为我收到了来自索引 GitHub 的机器人的垃圾邮件。

0 投票
1 回答
1958 浏览

git - 反复使用 git-filter-branch 重写新的提交

我想将与更大应用程序一起分发的模块拆分为单独的子模块,并保持从上游拉取的能力。

所以这比将子目录分离到单独的 Git 存储库更复杂。我不仅有使用 git-filter-branch 一次,而且还希望在我这样做之后保持拉上游更改的能力(而上游没有)。

现在只需在上游的完整历史记录上重新运行 git-filter-branch ,包括在我重写的历史记录中未找到的新提交,这不是一种选择,因为我必须为数百个模块执行此操作,并且提交的数量接近 100.000 .

我猜这涉及将历史限制为仅新提交,重写它们,然后在先前重写的提交之后添加它们,但我不确定如何做到这一点 - 也许有更好的方法。

如果分支和标签也可以保留会很好,但这不是绝对必要的,如果它使事情复杂化,我实际上更愿意失去这些。

0 投票
7 回答
6242 浏览

git - 如何在保留子目录的同时拆分 git 存储库?

我想要的是类似于这个问题。但是,我希望拆分为单独存储库的目录保留该存储库中的子目录:

我有这个:

我想把它分成两个完全独立的存储库:

如何在 git 中做到这一点?

如果有某种方法可以将所有新 repo 的内容移动到整个历史记录中的子目录中,我可以使用这个答案中的方法。

0 投票
1 回答
306 浏览

git - 在 `git filter-branch` 或 `git-rebase` 期间构建哈希查找表

我一直在使用我的提交的 SHA1 哈希作为文档等中的引用。我已经意识到,如果我需要重写这些提交,我需要创建一个查找表来将原始 repo 的哈希与过滤后的 repo 的哈希值。由于这些实际上是 UUID,一个简单的查找表就可以了。

我认为在filter-branch运行期间编写脚本来执行此操作相对简单;这不是我的问题,但如果有一些让事情变得复杂的问题,我当然很想听听他们。我真的想知道是否有提供此功能的工具,或者是否有某种约定保存查找表的位置/调用它的位置?我宁愿不以完全独特的方式做事。

0 投票
10 回答
47305 浏览

git - 将许多子目录分离到一个新的、单独的 Git 存储库中

这个问题基于将子目录分离到单独的 Git 存储库中

我不想分离一个子目录,而是分离一对。例如,我当前的目录树如下所示:

而我想要这个:

--subdirectory-filter参数git filter-branch不起作用,因为它在第一次运行时会删除除给定目录之外的所有内容。我认为--index-filter对所有不需要的文件使用该参数会起作用(尽管很乏味),但如果我尝试多次运行它,我会收到以下消息:

有任何想法吗?TIA

0 投票
3 回答
28114 浏览

git - 如何在 Git 存储库中为所有提交移动目录?

假设我有一个包含此目录结构的存储库:

我想移动_posts到 repo 的顶层,所以结构将如下所示:

这很简单git mv,但我想让历史看起来好像_posts 总是存在于 repo 的根目录中,并且我希望能够获得some-post.htmlvia的整个历史git log -- _posts/some-post.html。我想我可以使用一些魔法git filter-branch来完成这个,但我还没有弄清楚如何做到这一点。有任何想法吗?