Git 过滤分支仅适用于 fork 提交

标签 git git-filter-branch

我 fork 了另一个存储库,然后向其中添加了许多文件。我偶尔会 merge 原始存储库中的更改以保持最新状态。

我意识到我的 fork 中有一些文件应该被删除,所以我尝试按照 [1] 从我的 git 存储库中删除一些文件。源代码库有数千个提交,而我有几百个。

当我执行该命令时,它也会尝试搜索所有源提交,而不仅仅是我的 fork 提交,这将花费数小时而不是几分钟。

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch filename.txt' --prune-empty @

其间有许多来自上游的 merge 。

master         A---B---C---D---E---F---G (HEAD)
                  /       /
upstream/master  H---I---J---K

[1] https://help.github.com/en/github/authenticating-to-github/removing-sensitive-data-from-a-repository

最佳答案

我还没有查看 filter-repo 命令,但是您可以向 filter-branch 提供您想要检查的提交的确切列表,以及 a 之后的所有内容-- arg 被馈送到 rev-list filter-branch 运行以生成其候选者,例如

git filter-branch --index-filter "$myfilter" -- --first-parent HEAD

关于Git 过滤分支仅适用于 fork 提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59723878/

相关文章:

git - 在 git filter-branch 之后忘记 rm refs/original

git - 如何恢复 git 历史记录重写?

git - 为什么 git reset 和 push 在远程和分支名称之间使用斜杠和空格?

git - 重写 git 历史,在每个文件中替换一个词

git - 指向多个 git 存储库的单个目录

git - 如何查看git中第一次和第三次提交的区别?

git - 重写历史 git filter-branch create/split into submodules/subprojects

部分 merge 的 Git 工作流程?

git - git bash 中的 ssh 客户端在哪里存储它在 Windows 上的 known_hosts 文件?

git - 根据新的 gitignore 从 git 跟踪文件中删除