我想改变历史上某个特定承诺的作者。这不是最新的承诺。

相关:如何更改多次提交的作者和提交人姓名/电子邮件?


当前回答

提交时间:

要修复所有提交的作者,您可以从@Amber的回答中应用命令:

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

或者,要重复使用您的姓名和电子邮件,您只需写下:

git commit --amend --author=Eugen

命令后提交:

例如,从4025621开始更改所有:

您必须运行:

git rebase --onto 4025621 --exec "git commit --amend --author=Eugen" 4025621

注意:要包含包含空格(如姓名和电子邮件地址)的作者,作者必须用转义引号括起来。例如:

git rebase --onto 4025621 --exec "git commit --amend --author=\"Foo Bar <foo@bar.com>\"" 4025621

或将此别名添加到~/.gitconfig中:

[alias]
    reauthor = !bash -c 'git rebase --onto $1 --exec \"git commit --amend --author=$2\" $1' --

然后运行:

git reauthor 4025621 Eugen

其他回答

推送提交后重命名作者名称的步骤

首先键入“gitlog”以获取提交id和更多详细信息git rebase i HEAD~10(10是要在rebase上显示的提交总数)如果您有以下内容致命:似乎已经有一个rebase合并目录,并且我想知道你是不是在另一个地方。如果这是箱子,请试试git rebase(--continue|--abort|--skip)如果不是这样,请rm-fr“.git/rebase合并”再跑一次。我要停下来,以防你还有事在那里很有价值。然后根据需要键入“git-rebase--continue”或“git-rebase--abort”现在您将重新创建窗口,单击键盘上的“i”键然后,您将得到提交列表为10[因为我们已经通过了上面的10个提交]如下图所示pick 897fe9e稍微简化了代码pick abb60f9添加新功能pick dc18f70错误修复现在,您需要在要编辑的提交下面添加下面的命令,如下所示pick 897fe9e稍微简化了代码exec git commit--modify--author的作者名称<author.name@mail.com>'pick abb60f9添加新功能exec git commit--modify--author的作者名称<author.name@mail.com>' pick dc18f70错误修复exec git commit--modify--author的作者名称<author.name@mail.com>'就这样,现在只需按ESC键,:wq,即可完成所有设置然后git push origin HEAD:BRANCH NAME-f[请注意-f Force push]像gitpush-f或gitpushorigin HEAD:dev-f

如果您使用的是集中存储库,Amber的答案还有一个步骤:

gitpush-f强制更新中央存储库。

请注意,在同一分支上工作的人不多,因为这会破坏一致性。

对于这个问题,也有一种懒惰的方法,特别是当您有多个提交需要更改时。在我的案例中,我有一个新的分支,它与错误的作者进行了多次提交,所以是什么帮助了我:

转到您的原始分支:

git checkout develop

从中创建新分支:

git checkout -b myFeature develop 

将其合并为一次提交,但不包含提交信息:

git merge --no-commit --squash branchWrongAuthor

您可能还想进行更改:

git stage .

更改作者姓名并提交更改:

git commit --amend --author "New Author Name <New Author Email>" -m "new feature added"

就这样,你可以推动改变。

git push

之后,您可以删除具有错误作者的分支。

提交时间:

要修复所有提交的作者,您可以从@Amber的回答中应用命令:

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

或者,要重复使用您的姓名和电子邮件,您只需写下:

git commit --amend --author=Eugen

命令后提交:

例如,从4025621开始更改所有:

您必须运行:

git rebase --onto 4025621 --exec "git commit --amend --author=Eugen" 4025621

注意:要包含包含空格(如姓名和电子邮件地址)的作者,作者必须用转义引号括起来。例如:

git rebase --onto 4025621 --exec "git commit --amend --author=\"Foo Bar <foo@bar.com>\"" 4025621

或将此别名添加到~/.gitconfig中:

[alias]
    reauthor = !bash -c 'git rebase --onto $1 --exec \"git commit --amend --author=$2\" $1' --

然后运行:

git reauthor 4025621 Eugen

作为Eugen Konkov回答的补充,可以保留提交/作者日期。要只修改作者而不修改最后三次提交的日期,请使用

git rebase --onto HEAD~3 --exec 'GIT_COMMITTER_DATE="$(git log -n 1 --format=%aD)" git commit --amend --reset-author --no-edit --date="$(git log -n 1 --format=%aD)"' HEAD~3

然后用力推

git push --force-with-lease