Gab*_*les 23 version-control github pull-request
我发现 GitHub 中缺少的这个功能令人沮丧,因此我在这里记录我的解决方法以帮助下一个人。欢迎使用替代的、更好的解决方法。
这个问题不是如何更改GitHub 中提交的作者?...因为这个问题不清楚,它是询问如何重写一些提交的作者并将其推送到 github,还是实际上更改最初创建整个 PR 的名称。而且,该问题的公认答案是对本地.git/config文件的简单修复,这显然无法解决我在这里讨论的 GitHub 问题。
在 GitHub PR 的顶部,您会看到如下内容:
username想要将1提交合并到base_branchfromtheir_feature_branch
那username:我们怎样才能改变这一点?
PR 示例(从 GitHub 中“随机”选择,只是为了显示下图中的 PR 作者行)。图像:
假设每个人都具有对整个存储库的完全推送访问权限,这意味着您无论如何都可以向彼此的分支推送/拉取。
2020 年,我的一位同事在一个全新的分支上创建了 PR,该分支原本打算进行 3 个月的工作,直到其中包含大量新功能。然后,它将被合并。当迷你 PR 进入这个单独的、长期运行的、独立的分支时,同行评审将会发生。
PR 最初是用“不审查”标签打开的,只是为了让分支建立起来,这样我们的 CI(持续集成)系统就会开始每天构建它,以确保它不会被破坏。然后,我们都会为这个分支做出贡献,并理解打开它的人将是“流程所有者”,并引导分支完成所有测试和流程,直到它合并回主分支。
我的同事在发布此公关后立即离开了公司。我立即成为流程负责人,并在 PR 上工作了 3 个月并最终合并了它。该存储库是由维护者设置的,以禁用除“挤压合并”之外的所有类型的合并(请参阅我在这个问题下的评论),因此当它被合并时,Github 将所有数十个单独的提交压缩为一个巨大的提交并附加我同事的名字(请记住,他过去 3 个月没有来过公司)提交到该提交,尽管这是我在其 3 个月的生命周期中几乎全部管理的提交。
git diff --shortstat 123456789abcd~..123456789abcd显示以下输出:
164 files changed, 10360 insertions(+), 3013 deletions(-)
Run Code Online (Sandbox Code Playgroud)
...意味着提交触及了 164 个文件,添加了 10360 行,删除了 3013 行。你猜怎么着!?我的同事的名字是所有这些更改的名字,只是因为他最初打开了 PR,而不是我的名字,尽管很多工作都是我的,而且我是它的流程所有者。至少可以说,这很令人困惑。我本来希望在所有这些更改的行上都写上我的名字。
因此,我在这里的回答是我应该做的,但当时没有做,因为我不知道 GitHub 总是使用打开PR 的人的名字,而且我不知道如何更改 PR 的所有者公关。现在,我确实知道了,并且我已在答案中记录了我的解决方法。
我实际上做的是我的答案中的选项1,但我应该做的是我的答案中的选项2 。
Gab*_*les 16
有时,任务会从一名团队成员转移给另一名团队成员,或者一名团队成员离开团队。当这种情况发生时,最好“征用”或接管他们的 PR,使其成为你的 PR。然而,据我所知,这在 GitHub 上还不可能。
\n在Phabricator(GitHub 的付费替代品,最初是 Facebook 使用的内部工具)上,这就像单击“Commandeer Revision”按钮一样简单(请参阅“接管其他作者的更改”下的旧文档)。这被称为“征用某人的 diff”,其中“diff”在 Phabricator 中相当于 GitHub PR 或“Pull Request”。
\n即:如何更改打开 PR 的所有者,使之看起来像是您打开了 PR,而不是他们。
\n因此,由于 GitHub 不允许征用 PR,因此有一些选择:
\ngit fetch origin their_branch_name\ngit checkout their_branch_name\nRun Code Online (Sandbox Code Playgroud)\ngit branch -m new_branch_name\nRun Code Online (Sandbox Code Playgroud)\ngit push推送到附加到其开放 PR 的远程分支名称时:\ngit push --set-upstream origin new_branch_name:their_branch_name\nRun Code Online (Sandbox Code Playgroud)\n注意:我git push -u origin local_FROM_branch:remote_TO_branch在这里学习了语法:如何轻松地将本地 Git 分支推送到具有不同名称的远程?\n另请参阅我自己对该问题的新答案。git push\nRun Code Online (Sandbox Code Playgroud)\ngit pull origin their_branch_name\nRun Code Online (Sandbox Code Playgroud)\n现在,只要 PR 完成并经过审核,您就可以通过 GitHub 合并它。如果您选择常规合并选项,您将获得提交的功劳。如果您选择“压缩并合并”选项,则原始作者(而不是您)将获得整个合并的全部功劳。这是愚蠢的,应该由 GitHub 修复,但是,事情就是这样。
\n
。git fetch origin their_branch_name\ngit checkout their_branch_name\nRun Code Online (Sandbox Code Playgroud)\ngit branch -m new_branch_name\nRun Code Online (Sandbox Code Playgroud)\norigin。这会推送到您的远程分支,并允许您在 GitHub 上以您的名字打开一个新 PR:\ngit push --set-upstream origin new_branch_name\n# Note: if you didn\'t rename the branch to `new_branch_name` above, \n# and it is therefore still called `their_branch_name` locally, just\n# use `their_branch_name` here instead.\nRun Code Online (Sandbox Code Playgroud)\ngit push\nRun Code Online (Sandbox Code Playgroud)\ngit pull origin new_branch_name\nRun Code Online (Sandbox Code Playgroud)\n现在,当 PR 完成并经过审核后,您可以将其合并到 GitHub 上。如果您选择“压缩并合并”选项,您的名字现在将用于最终的单个提交,该提交将合并到base_branch.
| 归档时间: |
|
| 查看次数: |
16670 次 |
| 最近记录: |