标题完美地概括了它。我在主 GitHub 分支上有几个提交,我也想添加一个共同作者。我尝试使用 git --amend
并以正确的语法将电子邮件和名称添加到提交中,但它不起作用并且文本本身刚刚出现。我不确定这是因为我的语法错误还是它根本不起作用,但我在网上找不到任何有关此的资源。如果有任何信息请告诉我!
回答1
这是可能的,但对于共享分支,这是不可取的。
更改共享分支的 Git 历史记录很少是一个好主意,最好避免。可能有一些例外情况,例如删除意外推送的凭据。
正如@torek 所提到的,提交是不可变的。因此,您要做的是更改提交历史记录,这会对所有未来的提交产生级联影响,因此任何签出您的代码的人都需要在之后重置到远程,并且任何待处理的 PR 都将变为无效。
换句话说,如果您有 main
或其他共享分支,我建议您离开它。但是,如果它位于尚未合并到共享分支的功能分支中,那么您绝对可以在事后添加共同作者!
在您的本地存储库中,首先确保您已分别使用 https://git-scm.com/docs/git-fetch 和 https://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
更改为 edit
或 e
并保存/退出编辑器。
这是 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 之前尝试恢复本地分支的先前状态!