标题完美地概括了它。我在 GitHub 主分支上有一些提交,我也想添加一个共同作者。我尝试使用 git --amend 并以正确的语法将电子邮件和名称添加到提交中,但它不起作用,文本本身只是显示出来。我不确定这是否是因为我的语法错误或者它根本不起作用,但我在网上找不到任何有关此的资源。如果有任何信息请告诉我!
最佳答案
这是可能的,但对于共享分支,这是不可取的。
更改共享分支的 Git 历史记录很少是一个好主意,并且最好避免。可能存在一些异常(exception)情况,例如删除意外推送的凭据。
正如 @torek 提到的,提交是不可变的。因此,您要做的就是更改提交历史记录,这会对所有 future 的提交产生级联影响,因此 checkout 您的代码的任何人都需要在此之后重置到远程,并且任何待处理的 PR 都将变得无效。 p>
换句话说,如果您考虑了 main
或其他共享分支,我建议保留它。但是,如果它位于尚未 merge 到共享分支的功能分支中,那么您绝对可以在事后添加共同作者!
在本地存储库中,首先确保您已使用 git fetch
提取了远程分支上的所有更改。和 git pull
分别。
git fetch --all
git pull {remote} {branch}
然后你想用 git rebase -i
启动交互式 rebase 。这将倒回提交,并允许您指定重播时要执行的操作,例如压缩、修改或完全删除。
第二个参数应该是您要修改的最早提交的提交引用,您可以只执行 HEAD~N
来指定 N 个提交。例如,如果最后一次修改提交是 5 次提交,则为 HEAD~5
。
git rebase -i HEAD~5
这将为您提供说明,对于您想要为其设置不同提交消息的所有提交,请将左侧的操作从 pick
更改为 edit
或 e
并保存/退出编辑器。
此时 git 将倒回并开始重放提交,但它会在您设置为编辑
的任何提交处停止,以便您可以在继续重放之前进行修改。
使用git commit --amend -m
将消息更改为您想要的内容,在您的情况下应包括:
…
Co-authored-by: Name <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bfd1ded2daffdac7ded2cfd3da91d0cdd8" rel="noreferrer noopener nofollow">[email protected]</a>>
然后执行 git rebase --continue
继续编辑用 edit
标记的下一个提交。
完成后,您应该能够查看git log
中的历史记录。因此请检查一下以确保您对此感到满意。
最后,由于历史记录已更改,您需要执行 git push --force-with-lease
.
git push --force-with-lease {remote} {branch}
在 rebase 期间,您始终可以执行 git rebase --abort
来避免 panic 。
如果在 rebase 后你发现你不小心搞砸了一些事情,请立即停止你正在做的事情并查看 git reflog
在开始 rebase 之前尝试恢复本地分支之前的状态!
关于git - 是否可以让某人成为已推送到 GitHub 的过去提交的共同作者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72245016/