Git 修改合并拉取请求的电子邮件 (github)?

Git amend email of a merge pull request (github)?

我正在尝试进行交互式变基以更改拉取请求的电子邮件。它出现在 git 日志中

commit 0b7e8dc4ebe9fb6ee4394cbf6effb3d43b8cd6a8
Merge: 9de954e 30a5ede
Author: test user <testuser@gmail.com>
Date:   Sun Feb 11 08:29:41 2018 +0100

    Merge pull request #1 from tester/greenkeep/initial

所以我知道它在那里,但是当我尝试做一个变基时,我没有看到它。

我看到所有其他提交。有什么特殊情况吗?

拉取请求在 github 上。

我知道不建议重写历史记录,我之前已经这样做过但是在拉取请求中,它似乎丢失了?

真正令人困惑的是 git rebase -i 甚至没有显示拉取请求消息。我什至试过

git rebase -i head~20

我知道拉取请求是在完成几次提交后完成的。

有什么想法吗?

Rebase discards 默认合并,如 the linked question.

拉取请求本质上是向其他人发送消息,要求他们将您的提交合并或变基到他们的工作中,所以第一个要回答的问题是你是否需要你自己的合并到这一系列的提交中。 如果他们选择对您的一系列提交进行变基,他们的变基将无论如何丢弃您的合并。(这如果他们在 GitHub 上选择非合并 "squash" 选项,也是如此。您可以在没有 GitHub 的情况下以老式方式发出拉取请求,但由于您已将其标记为 [=18] =] 我假设您也使用 GitHub 发出了拉取请求。)

但是,如果他们要合并,那么您的合并将包含在他们合并您的提交时添加到其存储库的一系列提交中。在这种情况下,您可能希望将现有的合并提交(其作者不正确)替换为新的更正合并提交(作者正确)。如果不是在您的一系列提交的末尾,那可能会相当困难。在这种情况下,请务必查看 Rebasing a Git merge commit 的答案,并注意 git rebase --preserve-merges 实际上会重新 执行 合并。

您也可以考虑使用 git filter-branch 仅更改一个提交,如 Change the author and committer name and e-mail of multiple commits in Git 中那样,但使​​用 $GIT_COMMIT 变量来测试一个特定的提交哈希 ID。请注意,filter-branch 很难正确使用;始终在存储库的 副本 上进行实验。

如果合并提交恰好位于您要求其他人拉取的提交的末尾,那么有一种更简单的方法可以做到这一点:只需使用 git commit --amend --reset-author--amend 代码知道如何将合并提交复制到修改后的合并提交,并且由于在合并提交后 没有提交 ,因此没有后续提交需要复制-with-something-changed 操作使用新的 "amended" 提交的新哈希 ID。

filter-branch 和 interactive-rebase 代码部分复杂 因为 一旦你在一系列的中间复制但调整了一个提交提交,每个后续提交也必须被复制但调整,以使用其替换父代的新哈希ID。使用git commit --amend时,有没有后续提交,所以这种复杂性就消失了。)