是否可以让某人在过去的提交中成为 co-author 已经推送到 GitHub?
Is it possible to make someone a co-author on a past commit already pushed to GitHub?
标题完美地概括了它。我在主 GitHub 分支上有几个提交,我也想添加一个 co-author。我尝试使用 git --amend
并以正确的语法将电子邮件和名称添加到提交中,但它没有用,文本本身就显示出来了。我不确定这是因为我的语法错误还是因为它根本不起作用但我在网上找不到任何关于此的资源。如果有任何信息请告诉我!
可以,但对于共享分支不建议。
更改共享分支的 Git 历史 很少 是个好主意,最好始终避免。这可能有一些例外,例如删除意外推送的凭据。
正如@torek 提到的,提交是不可变的。所以,你要做的是改变提交历史,这对所有未来的提交都有级联效应,所以任何检查过你的代码的人都需要在之后重置到远程,任何挂起的 PR 都将变得无效。
换句话说,如果您有 main
或其他一些共享分支,我建议您离开它。但是,如果它位于尚未合并到共享分支的功能分支中,那么您绝对可以在事后添加 co-authors!
在您的本地存储库中,首先确保您已分别使用 git fetch
and git pull
拉取远程分支上的任何更改。
git fetch --all
git pull {remote} {branch}
那么你想用 git rebase -i
开始一个交互式变基。这将倒回提交,并允许您指定在重播它们时要执行的操作,例如压缩、修改或完全删除。
第二个参数应该是你要修改的最早提交的提交参考,你可以只做HEAD~N
指定N次提交。例如,HEAD~5
如果要修改的最后一次提交是 5 次提交。
git rebase -i HEAD~5
这将为您提供说明,对于您希望为其提供不同提交消息的所有提交,将左侧的操作从 pick
更改为 edit
或 e
并且save/exit 编辑。
此时 git 将倒带并开始重播提交,但它会在您设置为 edit
的任何提交上停止,因此您可以在继续重播之前进行修改。
使用 git commit --amend -m
将消息更改为您想要的内容,在您的情况下应包括:
…
Co-authored By: Name <name@example.org>
然后执行 git rebase --continue
以继续编辑您标记为 edit
的下一个提交。
完成后,您应该可以在 git log
中查看历史记录,因此请检查那里以确保您对此感到满意。
最后,因为历史已经改变,你需要做git push --force-with-lease
。
git push --force-with-lease {remote} {branch}
在 rebase 期间,你总是可以 git rebase --abort
来摆脱恐慌。
如果在 rebase 之后你发现你不小心搞砸了一些东西,请立即停止你正在做的事情并查看 git reflog
以尝试恢复你的本地分支在你开始 rebase 之前的先前状态!
标题完美地概括了它。我在主 GitHub 分支上有几个提交,我也想添加一个 co-author。我尝试使用 git --amend
并以正确的语法将电子邮件和名称添加到提交中,但它没有用,文本本身就显示出来了。我不确定这是因为我的语法错误还是因为它根本不起作用但我在网上找不到任何关于此的资源。如果有任何信息请告诉我!
可以,但对于共享分支不建议。
更改共享分支的 Git 历史 很少 是个好主意,最好始终避免。这可能有一些例外,例如删除意外推送的凭据。
正如@torek 提到的,提交是不可变的。所以,你要做的是改变提交历史,这对所有未来的提交都有级联效应,所以任何检查过你的代码的人都需要在之后重置到远程,任何挂起的 PR 都将变得无效。
换句话说,如果您有 main
或其他一些共享分支,我建议您离开它。但是,如果它位于尚未合并到共享分支的功能分支中,那么您绝对可以在事后添加 co-authors!
在您的本地存储库中,首先确保您已分别使用 git fetch
and git pull
拉取远程分支上的任何更改。
git fetch --all
git pull {remote} {branch}
那么你想用 git rebase -i
开始一个交互式变基。这将倒回提交,并允许您指定在重播它们时要执行的操作,例如压缩、修改或完全删除。
第二个参数应该是你要修改的最早提交的提交参考,你可以只做HEAD~N
指定N次提交。例如,HEAD~5
如果要修改的最后一次提交是 5 次提交。
git rebase -i HEAD~5
这将为您提供说明,对于您希望为其提供不同提交消息的所有提交,将左侧的操作从 pick
更改为 edit
或 e
并且save/exit 编辑。
此时 git 将倒带并开始重播提交,但它会在您设置为 edit
的任何提交上停止,因此您可以在继续重播之前进行修改。
使用 git commit --amend -m
将消息更改为您想要的内容,在您的情况下应包括:
…
Co-authored By: Name <name@example.org>
然后执行 git rebase --continue
以继续编辑您标记为 edit
的下一个提交。
完成后,您应该可以在 git log
中查看历史记录,因此请检查那里以确保您对此感到满意。
最后,因为历史已经改变,你需要做git push --force-with-lease
。
git push --force-with-lease {remote} {branch}
在 rebase 期间,你总是可以 git rebase --abort
来摆脱恐慌。
如果在 rebase 之后你发现你不小心搞砸了一些东西,请立即停止你正在做的事情并查看 git reflog
以尝试恢复你的本地分支在你开始 rebase 之前的先前状态!