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

标签 git github git-commit post-commit

标题完美地概括了它。我在 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 更改为 edite 并保存/退出编辑器。

此时 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/

相关文章:

带有编辑器的 Git Commit Error 终端

git - Visual Studio 2019 Github 扩展命令 : "pop and restore staged" vs "pop all as unstaged"?

git - 使用 Intellij 解决 pull 请求期间的冲突

Gitlab CI - 如何仅在特定文件集发生更改时触发构建

git - 更新 Git 到最新版本 (mac)

git - 您的主要分支不 protected

Github 在我提交时无法识别我的帐户

git - 如果有未跟踪的文件,如何禁止 git commit?

git - 与另一个存储库共享 git 下的文件子集,维护提交

git - Bitbucket 需要更改最后一次提交的作者姓名