通常情况下,当您使用git重新定义另一位作者的提交时,git会添加一个Commit:
标题,其中包含您的姓名和电子邮件地址。我有一种情况,我不希望这种情况发生。我希望重新提交的提交最终使用与原始作者自己完成相同的rebase时相同的SHA1。这可能吗?
答案 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_NAME
和GIT_COMMITTER_EMAIL
(也可能GIT_COMMITTER_DATE
)。 (但这将影响现在创建的所有提交。)