如何删除某个作者的所有提交(错误提交 - 这样的作者不应该在提交历史记录中可见)。

我找到了一些重命名的代码 -

git filter-branch --env-filter '
OLD_EMAIL="[email protected]"
CORRECT_NAME="name"
CORRECT_EMAIL="[email protected]"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags


git push --force --tags origin 'refs/heads/*'

是否有一些过滤器不重命名但删除此类提交?

最佳答案

你可以这样做:

  • 根据要开始的提交创建一个新分支:
    git checkout -b <branch-name> <base-commit>
    
  • cherry-pick 所有没有匹配作者的提交:
    git log --author "<name>" --invert-grep --reverse --format="format:%H" HEAD..master | xargs git cherry-pick
    
  • log 过滤掉作者所做的所有提交,然后 cherry-pick 将它们一个接一个。

    参数说明(部分引用自 git log manpage):
  • --author "name" 将提交输出限制为具有与指定模式(正则表达式)匹配的作者/提交者标题行的提交输出。使用多个 --author=,提交其作者与任何给定的
    选择模式(类似于多个 --committer=)。
  • --invert-grep将提交输出限制为日志消息与 --grep=
  • 指定的模式不匹配的提交输出
  • --reverse以相反的顺序输出提交。 […]
  • --format="format:%H" 使用自定义格式,在这种情况下只有提交哈希
  • 关于git - 删除作者的所有提交,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39232800/

    10-14 17:17
    查看更多