执行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插件会扫描本地所有引用,同时展示重写后的新提交和备份的旧提交,就会出现重复提交的异常显示,并不是分支上真的存在两份重复提交。
异常表现参考:
修复步骤
- 先执行
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
相关产品推荐
相关产品推荐

