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

执行git filter-branch后Android Studio显示重复提交如何解决

问题成因

执行如下git filter-branch命令重写提交邮箱后出现重复提交,本质是Git的备份机制导致的:

git filter-branch --env-filter '
WRONG_EMAIL="pratik@google.com"
NEW_NAME="Pratik"
NEW_EMAIL="pratik@gmail.com"

if [ "$GIT_COMMITTER_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$NEW_NAME"
    export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$WRONG_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$NEW_NAME"
    export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags

git filter-branch执行时会自动将重写前的原始提交备份到refs/original/命名空间下,避免操作失误丢失历史,这些备份引用不会被自动清理。Android Studio的Git插件会扫描本地所有引用,同时展示重写后的新提交和备份的旧提交,就会出现重复提交的异常显示,并不是分支上真的存在两份重复提交。
异常表现参考:Android Studio中显示的重复提交记录

修复步骤
  • 先执行git log检查当前分支提交,确认所有目标提交的邮箱、用户名已经替换正确,重写结果符合预期。
  • 删除filter-branch生成的备份引用,执行命令:
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
  • 清理本地仓库的失效引用记录与冗余对象:
git reflog expire --expire=now --all
git gc --prune=now
  • 如果仓库已经关联远程,确认本地历史正确后,需要强制推送重写后的分支与标签覆盖远程:

注意:历史重写会改变提交哈希,影响所有协作者,操作前务必同步通知团队成员,避免出现代码冲突

git push --force --all
git push --force --tags
验证结果

操作完成后重启Android Studio,重新加载Git提交面板,重复的提交条目就会消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:24:24