You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何复现PR提交历史的作者变更?无需git commit --amend可行吗?

PR提交作者变更的可能方式及rebase相关疑问

我想了解PR提交历史出现如下作者变更的所有可能方式,是否可以不通过git commit --amend --author="xxx"实现?我在分支完成工作后返回,发现所有提交的作者变为<my-coworker>,但提交内容完全一致。

场景1

初始状态

<my-user> 发起PR
<my-user> 添加了N个提交:
* <my-commit-1> by <my-user>
* <my-commit-2> by <my-user>

新状态

<my-user> 发起PR
<my-coworker> 强制推送<this-prs-branch>从<ref>到<ref>
<my-coworker> 添加了N个提交:
* <my-commit-1> by <my-coworker>
* <my-commit-2> by <my-coworker>
* 其他提交 by <my-coworker>
<my-coworker> 强制推送<this-branch>从<ref>到<ref>

场景2

初始状态

<my-user> 发起PR
<my-user> 添加了N个提交:
* <my-commit-1> by <my-user>
* <my-commit-2> by <my-user>

新状态

<my-user> 发起PR
<my-coworker> 添加了N个提交:
* <my-commit-1> by <my-coworker>
* <my-commit-2> by <my-coworker>
* 其他提交 by <my-coworker>
<my-coworker> 强制推送<this-prs-branch>从<ref>到<ref>

我可以通过git commit --amend --author='<another-author>'复现场景2,但同事称作者变更是因为将功能分支rebase到master分支导致的。我尝试了不同用户的交互式rebase及冲突处理,仅能得到<my-user>为作者、<another-user>为提交者的提交,无法得到完全由<another-user>作为作者的提交。请问我遗漏了什么?


无需git commit --amend --author的作者变更方式

  • 交互式rebase重置作者:执行git rebase -i HEAD~N(N为要修改的提交数量),在弹出的编辑界面中,将目标提交的指令改为edit。进入编辑模式后,执行git commit --reset-author,此命令会将当前Git配置的用户设为该提交的作者,随后用git rebase --continue完成rebase,最后强制推送分支即可。
  • 批量rebase修改作者:使用git rebase --exec "git commit --reset-author" HEAD~N,批量将指定范围内的所有提交作者重置为当前执行命令的用户,完成后强制推送分支覆盖原提交。
  • 克隆后重新提交:同事克隆你的分支,在本地切换Git用户信息为自己的账号,然后用git cherry-pick将你的所有提交重新应用一遍,新提交的作者会是同事的账号,最后强制推送到原分支。
  • 用git filter-repo批量替换:借助git filter-repo工具,通过脚本或参数批量替换指定作者的信息,示例命令:
    git filter-repo --commit-callback '
    if commit.author_email == b"your-email@example.com":
        commit.author_name = b"my-coworker"
        commit.author_email = b"coworker-email@example.com"
    '
    
    执行后强制推送分支,所有匹配的提交作者都会被替换。

rebase导致作者变更的关键操作

你之前尝试rebase仅保留原作者的原因是,默认rebase会继承原提交的作者信息。要让rebase修改作者,需要主动触发以下操作:

  1. 在交互式rebase的编辑环节,对目标提交选择edit,修改时执行git commit --reset-author,而非直接git commit --no-edit。
  2. 若在rebase解决冲突后提交,使用git commit --no-edit --reset-author,会将当前用户设为提交的作者,而非保留原作者。
  3. 同事也可能临时修改了本地Git配置(git config user.name/git config user.email),或设置了环境变量GIT_AUTHOR_NAME、GIT_AUTHOR_EMAIL,再执行rebase并重置作者,从而生成作者为自己的提交。

内容的提问来源于stack exchange,提问作者burn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:50:01