git - 是否可以让某人成为已经推送到 GitHub 的过去提交的共同作者?

标题完美地概括了它。我在主 GitHub 分支上有几个提交,我也想添加一个共同作者。我尝试使用 git --amend 并以正确的语法将电子邮件和名称添加到提交中,但它不起作用并且文本本身刚刚出现。我不确定这是因为我的语法错误还是它根本不起作用,但我在网上找不到任何有关此的资源。如果有任何信息请告诉我!

回答1

这是可能的,但对于共享分支,这是不可取的。

更改共享分支的 Git 历史记录很少是一个好主意,最好避免。可能有一些例外情况,例如删除意外推送的凭据。

正如@torek 所提到的,提交是不可变的。因此,您要做的是更改提交历史记录,这会对所有未来的提交产生级联影响,因此任何签出您的代码的人都需要在之后重置到远程,并且任何待处理的 PR 都将变为无效。

换句话说,如果您有 main 或其他共享分支,我建议您离开它。但是,如果它位于尚未合并到共享分支的功能分支中,那么您绝对可以在事后添加共同作者!

在您的本地存储库中,首先确保您已分别使用 https://git-scm.com/docs/git-fetchhttps://git-scm.com/docs/git-pull 拉取远程分支上的任何更改。

git fetch --all
git pull {remote} {branch}

然后你想用 https://git-scm.com/docs/git-rebase 开始一个交互式变基。这将回退提交,并允许您在重放它们时指定要执行的操作,例如压缩、修改或完全删除。

第二个参数应该是您要修改的最早提交的提交参考,您只需执行 HEAD~N 即可指定 N 次提交。例如,如果要修改的最后一次提交是 5 次提交,则返回 HEAD~5

git rebase -i HEAD~5

这将为您提供说明,对于您希望拥有不同提交消息的所有提交,将左侧的操作从 pick 更改为 edite 并保存/退出编辑器。

这是 git 将倒带并开始重播提交的时间,但它会在您设置为 edit 的任何提交上停止,因此您可以在它继续重播之前进行修改。

使用 https://git-scm.com/docs/git-commit 将消息更改为您想要的,在您的情况下应包括:

…

Co-authored By: Name <name@example.org>

然后执行 git rebase --continue 继续编辑您用 edit 标记的下一个提交。

完成后,您应该能够查看 https://www.git-scm.com/docs/git-log 中的历史记录,因此请检查那里以确保您对此感到满意。

最后,由于历史已更改,您需要执行 https://www.git-scm.com/docs/git-push

git push --force-with-lease {remote} {branch}

在变基期间,您总是可以执行 git rebase --abort 来惊慌。

如果在 rebase 之后你发现你不小心搞砸了,请立即停止你正在做的事情并查看 https://git-scm.com/docs/git-reflog 以在开始 rebase 之前尝试恢复本地分支的先前状态!

相似文章

git - Git rebase 无效上游“开发”的问题

我有一种情况,我在3个月前从开发中创建了一个特性分支,从那时起,其他同事一直在研究其他发布到开发中的特性分支。我现在想将我的更改也集成到开发中,而不会破坏他们的代码,也不会破坏我的代码。我对此进行了研...

随机推荐

最新文章