推送后更改特定分支中过去提交的作者和电子邮件

Change author and email of past commit in a specific branch after push

所以我忘了将我的名字和电子邮件添加到 git 配置中,在我推送更改后我得到了一个默认名称。它基本上是这样的:

  1. [我的名字] - 提交(分支'feature_1')-- 最近的
  2. [默认名称] - 提交(分支'feature_1')
  3. [我朋友的名字] - 提交(分支'feature_2')
  4. [我的名字] - 提交(分支'master')

我该如何更改此列表中第二次提交的名称和电子邮件(从上到下)而不影响其他内容或弄乱分支?

编辑:我忘了补充一点,我是唯一一个从事此分支功能的人。

你实际上不能不修改任何东西。修改修订版中的任何信息(例如,通过修改)将创建一个完全不同的修订版。你可以这样做:

git checkout my-branch~2 # two revisions back from the branch tip
git commit --amend --author "Foo Bar <darthv@empire.com>"
git cherry-pick my-branch~2..my-branch # reapply revisions 3 and 4
git branch -f my-branch # set my-branch over here

但是从您修改的那一刻起,您正在创建与原始版本无关(就历史而言)的全新修订。将需要在远程上强制推送以替换分支,将需要其他开发人员了解此更改,以便他们可以在已经在该分支之上工作的情况下进行变基。反正不是特别痛....一切如常,如果你问我的话。

你可以改变你的分支,这会让你 "redo" 提交并让它有你的名字。然后你需要强制将更改推送到远程。

执行此操作的命令是:

git rebase -i <SHA before the commit with the default name>

您将获得提交列表,对于具有默认名称的提交,请指定您想要 "reword" 它。保存提交消息,您的历史记录将是最新的。

要更新遥控器,您需要 git push -f。这告诉 git 您的更改应该覆盖远程存储库中的内容。

不推荐

以上操作正在改变历史,如果其他人也在这个分支上工作,将会导致问题。当他们尝试用您的更改更新分支时,他们会遇到问题。如果您是唯一与该分支机构打交道的人,那不是问题。

如果多个人在分支上工作,就不要管提交。您不想在推送后重写历史记录。