问题标签 [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.
git - 你如何修复一个错误的合并,并将你好的提交重播到一个固定的合并上?
几次提交前,我不小心将一个不需要的文件(filename.orig
在解决合并时)提交到我的存储库,直到现在我才注意到它。我想从存储库历史记录中完全删除该文件。
是否可以重写filename.orig
从未添加到存储库中的更改历史记录?
git - 分离(移动)子目录到单独的 Git 存储库
我有一个Git存储库,其中包含许多子目录。现在我发现其中一个子目录与另一个无关,应该分离到一个单独的存储库。
如何在将文件历史记录保留在子目录中的同时做到这一点?
我想我可以制作一个克隆并删除每个克隆的不需要的部分,但我想这会在检查旧版本等时给我完整的树。这可能是可以接受的,但我更愿意假装两个存储库没有共享历史记录。
为了清楚起见,我有以下结构:
但我想要这个:
git - 如何在 Git 中更改多个提交的作者和提交者姓名和电子邮件?
我正在学校计算机上编写一个简单的脚本,并将更改提交到 Git(在我的笔式驱动器中的一个存储库中,从我家的计算机克隆)。在几次提交之后,我意识到我是以 root 用户的身份提交的东西。
有没有办法将这些提交的作者更改为我的名字?
git - 从 Git 历史记录中删除敏感文件及其提交
我想在 GitHub 上放置一个 Git 项目,但它包含某些带有敏感数据的文件(用户名和密码,例如 capistrano 的 /config/deploy.rb)。
我知道我可以将这些文件名添加到.gitignore,但这不会删除它们在 Git 中的历史记录。
我也不想通过删除 /.git 目录重新开始。
有没有办法删除Git 历史记录中特定文件的所有痕迹?
git - 用 Git 更改项目的第一次提交?
我想在项目的第一次提交中更改某些内容,而不会丢失所有后续提交。有没有办法做到这一点?
我不小心在源代码的评论中列出了我的原始电子邮件,我想更改它,因为我收到了来自索引 GitHub 的机器人的垃圾邮件。
git - 反复使用 git-filter-branch 重写新的提交
我想将与更大应用程序一起分发的模块拆分为单独的子模块,并保持从上游拉取的能力。
所以这比将子目录分离到单独的 Git 存储库更复杂。我不仅有使用 git-filter-branch 一次,而且还希望在我这样做之后保持拉上游更改的能力(而上游没有)。
现在只需在上游的完整历史记录上重新运行 git-filter-branch ,包括在我重写的历史记录中未找到的新提交,这不是一种选择,因为我必须为数百个模块执行此操作,并且提交的数量接近 100.000 .
我猜这涉及将历史限制为仅新提交,重写它们,然后在先前重写的提交之后添加它们,但我不确定如何做到这一点 - 也许有更好的方法。
如果分支和标签也可以保留会很好,但这不是绝对必要的,如果它使事情复杂化,我实际上更愿意失去这些。
git - 在 `git filter-branch` 或 `git-rebase` 期间构建哈希查找表
我一直在使用我的提交的 SHA1 哈希作为文档等中的引用。我已经意识到,如果我需要重写这些提交,我需要创建一个查找表来将原始 repo 的哈希与过滤后的 repo 的哈希值。由于这些实际上是 UUID,一个简单的查找表就可以了。
我认为在filter-branch
运行期间编写脚本来执行此操作相对简单;这不是我的问题,但如果有一些让事情变得复杂的问题,我当然很想听听他们。我真的想知道是否有提供此功能的工具,或者是否有某种约定保存查找表的位置/调用它的位置?我宁愿不以完全独特的方式做事。
git - 将许多子目录分离到一个新的、单独的 Git 存储库中
这个问题基于将子目录分离到单独的 Git 存储库中
我不想分离一个子目录,而是分离一对。例如,我当前的目录树如下所示:
而我想要这个:
--subdirectory-filter
参数git filter-branch
不起作用,因为它在第一次运行时会删除除给定目录之外的所有内容。我认为--index-filter
对所有不需要的文件使用该参数会起作用(尽管很乏味),但如果我尝试多次运行它,我会收到以下消息:
有任何想法吗?TIA
git - 如何在 Git 存储库中为所有提交移动目录?
假设我有一个包含此目录结构的存储库:
我想移动_posts
到 repo 的顶层,所以结构将如下所示:
这很简单git mv
,但我想让历史看起来好像_posts
总是存在于 repo 的根目录中,并且我希望能够获得some-post.html
via的整个历史git log -- _posts/some-post.html
。我想我可以使用一些魔法git filter-branch
来完成这个,但我还没有弄清楚如何做到这一点。有任何想法吗?