从git提交中删除提交者信息

10

我已经重新基于一个分支,并且现在所有的提交都有提交者部分,我想彻底删除它(不仅仅是更改它的字段)。是否可以在不丢失原始作者信息的情况下实现?


2
每个提交都有一个提交者头和一个作者头。但是,当两者相同时,某些客户端可能只会看到其中一个。 - Matthieu Moy
2个回答

17

多亏了@sergejGitHub,我成功地移除了提交者信息。

git filter-branch --env-filter '
if [ "$GIT_COMMITTER_EMAIL" != "$GIT_AUTHOR_EMAIL" ]; then
  export GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"
  export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"
  export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
fi
' --tag-name-filter cat -- --branches --tags

5

你需要重新编写历史记录。

GitHub有一个脚本可以实现这个功能,详见更改作者信息

将其调整为符合你需求应该很简单:

#!/bin/sh

git filter-branch --env-filter '

OLD_EMAIL="your-old-email@example.com"
CORRECT_NAME="Your Correct Name"
CORRECT_EMAIL="your-correct-email@example.com"

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_COMMITTER_NAME等与GIT_AUTHOR_NAME等匹配,那么它将被视为已删除? - Andrei
是的,刚测试了一下,看起来是这样的。 - Andrei
不起作用。创建了另一个分支,并包含旧的错误提交记录。 - Liquid Core
@LiquidCore,你给这个答案点了踩吗?它可能对于你的问题无效,但是对其他人有帮助。 - sergej
4
为了让任何对此交流感到困惑的人受益,Liquidcore感到不满,因为答案没有指出filter-branch会创建备份引用,这使他们以为命令没有起作用。他们似乎不愿承认错误,反而坚持投下了不合适的踩的票,而事实上答案是有效的。 - Mark Adelsberger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接