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

如何配置Git实现双仓库提交者身份双向替换?

解决双Git仓库提交者信息替换问题

核心思路

通过重写提交历史,将对方仓库中非你本人的提交,替换成你的姓名和邮箱后再推送到另一个仓库;自己的提交直接同步即可。

操作步骤(以两个仓库分别命名为repoA、repoB为例)

1. 初始化本地仓库并关联两个远程

# 先克隆其中一个仓库到本地
git clone <repoA的仓库地址> my-project
cd my-project

# 添加另一个仓库作为远程源
git remote add repoB <repoB的仓库地址>

2. 同步repoA中他人的提交到repoB(转为你的提交)

  • 拉取repoA的最新代码:
    git fetch repoA
    
  • 创建临时分支,基于repoA的主分支(假设主分支名为main):
    git checkout -b temp-repoA repoA/main
    
  • 批量修改临时分支上非你本人的提交信息:
    git filter-branch --env-filter '
    # 替换成你的姓名和邮箱
    CORRECT_NAME="你的名字"
    CORRECT_EMAIL="你的邮箱地址"
    
    # 若提交者不是你,替换为你的信息
    if [ "$GIT_COMMITTER_EMAIL" != "$CORRECT_EMAIL" ]
    then
        export GIT_COMMITTER_NAME="$CORRECT_NAME"
        export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
    fi
    if [ "$GIT_AUTHOR_EMAIL" != "$CORRECT_EMAIL" ]
    then
        export GIT_AUTHOR_NAME="$CORRECT_NAME"
        export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
    fi
    ' -- temp-repoA
    
  • 将修改后的临时分支合并到本地主分支,再推送到repoB:
    git checkout main
    git merge temp-repoA --no-ff
    git push repoB main
    
  • 清理临时分支(可选):
    git branch -D temp-repoA
    

3. 同步repoB中他人的提交到repoA(转为你的提交)

操作逻辑和上面完全一致,仅替换远程名即可:

# 拉取repoB最新代码
git fetch repoB
# 创建临时分支
git checkout -b temp-repoB repoB/main
# 批量替换提交信息(代码和上面一样,不用改)
git filter-branch --env-filter '
CORRECT_NAME="你的名字"
CORRECT_EMAIL="你的邮箱地址"
if [ "$GIT_COMMITTER_EMAIL" != "$CORRECT_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" != "$CORRECT_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' -- temp-repoB
# 合并并推送
git checkout main
git merge temp-repoB --no-ff
git push repoA main
# 清理临时分支
git branch -D temp-repoB

4. 同步你自己的提交到两个仓库

你自己开发的代码,直接在本地主分支提交后,推送到两个远程即可:

# 提交本地改动
git add .
git commit -m "你的提交说明"
# 推送到两个仓库
git push repoA main
git push repoB main

重要注意事项

  • git filter-branch会重写提交历史,推送时如果远程仓库已有这些提交,可能需要加-f强制推送(git push -f repoB main),但一定要提前和对应仓库的维护者沟通,避免覆盖他人未同步的改动。
  • 操作前建议备份本地仓库和远程仓库,防止误操作导致代码丢失。
  • 如果两个仓库的主分支不是main,替换成实际分支名(比如master)即可。

内容的提问来源于stack exchange,提问作者levi-jcbs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:35:01