Git已有两个远程仓库A和B,如何从A拉取并推送到B且覆盖作者信息?
实现从远程A拉取、推送到B时覆盖作者信息的方案
当然可行!Git提供了灵活的工具来修改提交的作者信息,你可以轻松实现从A拉取变更后,调整作者信息再推送到B的需求。下面是两种常用的实现方法,你可以根据自己的场景选择:
方法一:批量修改分支所有提交的作者信息(适合整分支迁移)
如果需要把从A拉取的整个分支上的所有提交作者都替换成你的信息,推荐使用git filter-repo(官方已弃用git filter-branch,filter-repo更高效安全):
- 先拉取远程A的最新变更到本地分支:
git pull A <你的目标分支名> - 先备份当前分支(避免操作失误导致数据丢失):
git checkout -b backup-<分支名> - 配置你的全局用户信息(如果还没设置的话):
git config --global user.name "你的姓名" git config --global user.email "你的邮箱地址" - 运行
git filter-repo批量修改所有提交的作者/提交者信息:
注意:这里的字符串需要加git filter-repo --commit-callback ' commit.author_name = b"你的姓名" commit.author_email = b"你的邮箱地址" commit.committer_name = b"你的姓名" commit.committer_email = b"你的邮箱地址" 'b前缀,因为filter-repo使用字节字符串处理内容。 - 强制推送到远程B(因为修改了提交历史,必须用强制推送覆盖远程分支):
git push B <你的目标分支名> --force
方法二:交互式修改指定提交的作者信息(适合少量提交)
如果只有个别提交需要修改作者信息,用交互式rebase更灵活:
- 拉取远程A的最新变更:
git pull A <你的目标分支名> - 启动交互式rebase,比如要修改最近3个提交:
git rebase -i HEAD~3 - 在弹出的编辑器中,把需要修改的提交前的
pick替换成edit,保存并退出。 - 进入单个提交的编辑状态后,执行修改作者信息的命令:
git commit --amend --author="你的姓名 <你的邮箱地址>" --no-edit - 继续完成rebase流程:
git rebase --continue - 重复步骤4-5直到所有目标提交修改完成,最后强制推送到远程B:
git push B <你的目标分支名> --force
重要注意事项
- 强制推送风险:
--force会覆盖远程B上对应分支的历史记录,务必确保该分支没有其他开发者在协作使用,否则会导致他人的工作丢失或产生严重冲突。 git filter-repo安装:如果你的Git版本没有自带该工具,可以通过系统包管理器安装(比如Ubuntu用apt install git-filter-repo,Mac用brew install git-filter-repo)。- 长期需求优化:如果需要频繁执行这个操作,可以把修改作者的命令封装成Git别名,简化后续操作。
内容的提问来源于stack exchange,提问作者empz
相关产品推荐
相关产品推荐

