在使用git时如何放弃某些特性的提交?

在使用git时如何放弃某些特性的提交?,git,git-commit,git-filter-branch,git-rewrite-history,git-history-graph,Git,Git Commit,Git Filter Branch,Git Rewrite History,Git History Graph,例如,我希望放弃提交消息为“temp commit”的所有提交,即如果原始提交历史记录如下所示: X1 - X2 - X4 -X7 - .... Xn-2 - Xn-1 - Xn \_ X3 -X5 - .. \_ X6 - X8 .. and x4 "temp commit" X6 "temp commit" Xn-1 "temp commit" 然后,提交历史将重写如下,即放弃提交x4、x6和xn-1 如果一个

例如,我希望放弃提交消息为“temp commit”的所有提交,即如果原始提交历史记录如下所示:

    X1 - X2 - X4 -X7 - .... Xn-2 -  Xn-1 - Xn
       \_ X3 -X5 - ..
             \_ X6 - X8  ..


    and x4 "temp commit"
    X6 "temp commit"
    Xn-1 "temp commit"
然后,提交历史将重写如下,即放弃提交x4、x6和xn-1

如果一个repo总共有2000次提交,其中500次提交的消息是“temp commit”,那么500次提交将被放弃,只剩下1500次提交,如何重写这个git历史

我知道这可能与筛选器分支有关,我知道如何使用--树索引删除文件夹,但如何删除具有特定特征的提交

    X1 - X2 -X7 - .... Xn-2 - Xn
       \_ X3 -X5 - ..
             \_  X8  ..
从开始,我会尝试(但我还没有测试过)

函数skip_commit的定义如下,将其导出或放入.bashrc

skip_commit()
{
    shift;
    while [ -n "$1" ];
    do
        shift;
        map "$1";
        shift;
    done;
}

我不确定这是适用于整个存储库还是只适用于一个分支

如果将其写入脚本文件,则很难将其全部写入命令行是的,可能我只是从链接中选取了示例并对其进行了轻微修改(删除作者的提交)。@HugeMow在任何情况下,您至少可以复制并粘贴它。
skip_commit()
{
    shift;
    while [ -n "$1" ];
    do
        shift;
        map "$1";
        shift;
    done;
}