如何在不将自己添加为提交者的情况下重新提交另一位作者的提交?

时间:2011-04-02 01:08:15

标签: git rebase

通常情况下,当您使用git重新定义另一位作者的提交时,git会添加一个Commit:标题,其中包含您的姓名和电子邮件地址。我有一种情况,我不希望这种情况发生。我希望重新提交的提交最终使用与原始作者自己完成相同的rebase时相同的SHA1。这可能吗?

2 个答案:

答案 0 :(得分:23)

所有git提交都在内部有一个提交者字段;您可以在提交后立即键入git cat-file commit HEAD来查看此内容。因此你无法抹去它;你只能使它等于作者字段。

也就是说,您可能会看到git porcelain显示提交字段,因为 datestamp 已更改。显然,如果它们正在进行重新定义,那么就无法预测其他人会为提交日期戳获得什么,但至少可以将其更改为等于原始提交时间戳。

git filter-branch --commit-filter 'export GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"; export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"; git commit-tree "$@"' -- basecommit..HEAD

这会在basecommit之后改变提交,在HEAD的历史记录中(包括HEAD,不包括basecommit),使得他们的提交者字段在所有方面都与作者字段相同。如果原作者同意做同样的事情,那么你可以获得一致的SHA1。

答案 1 :(得分:5)

尝试在重新定位时设置环境变量GIT_COMMITTER_NAMEGIT_COMMITTER_EMAIL(也可能GIT_COMMITTER_DATE)。 (但这将影响现在创建的所有提交。)