Git更改了不推送提交的作者

时间:2016-12-06 07:53:27

标签: git commit

我有两个提交,(已经提交了错误的电子邮件)所以我的推送被拒绝了。 如何在不丢失更改的情况下更改这些提交的电子邮件?

1 个答案:

答案 0 :(得分:2)

已经有了这个答案

  

使用Interactive Rebase

     

你可以做到

git rebase -i -p <some HEAD before all of your bad commits>
     

然后将所有不良提交标记为&#34;编辑&#34;在rebase文件中。如果您还想更改第一次提交,则必须手动将其添加为rebase文件中的第一行(遵循其他行的格式)。然后,当git要求您修改每个提交时,请执行

     
 git commit --amend --author "New Author Name <email@address.com>" 
     

编辑或关闭打开的编辑器,然后执行

git rebase --continue
     

继续改变。

     

您可以通过附加--no-edit跳过此处完全打开编辑器   这样命令就是:

     
git commit --amend --author "New Author Name <email@address.com>" --no-edit && \
git rebase --continue
     

单一提交

     

正如一些评论者所指出的,如果您只想更改最近的提交,则不需要rebase命令。只是做

     
 git commit --amend --author "New Author Name <email@address.com>"
     

这会将作者更改为指定的名称,但提交者将设置为git config user.namegit config user.email中已配置的用户。如果要将提交者设置为您指定的内容,则会设置作者和提交者:

     
 git -c user.name="New Author Name" -c user.email=email@address.com commit --amend --reset-author
     

关于合并提交的注意事项

     

我原来的回答有轻微的缺陷。如果当前HEAD和您的<some HEAD before all your bad commits>之间存在任何合并提交,那么git rebase会将它们展平(顺便说一句,如果您使用GitHub拉取请求,则会有一个大量的合并提交在你的历史中)。这通常会导致非常不同的历史记录(因为重复的更改可能会被重新排除&#34;),在最坏的情况下,它可能导致git rebase要求您解决困难的合并冲突(可能已经在合并提交中解决了)。解决方案是使用-p标记git rebase,这将保留历史记录的合并结构。 git rebase的联机帮助页警告说,使用-p-i可能会导致问题,但在BUGS部分中它表示&#34;编辑提交并重新提交其提交消息应该工作得很好。&#34;

     

我已将-p添加到上述命令中。对于您只是更改最近提交的情况,这不是问题。

在这篇文章中:Change the author and committer name and e-mail of multiple commits in Git