为何未切换到指定分支的情况下,代码会被推送到他人的Git分支?
Git提交错误推送至他人分支的问题原因分析
问题场景
人员A在X分支开发,人员B在Y分支开发,人员C通过rebase和git fetch拉取了人员B的分支代码,操作过程中未执行快进合并。后续出现异常现象:每当人员A、B提交代码推送到各自分支时,GitHub端显示代码实际被推送到了人员C的分支。
根本原因
- 本地分支上游跟踪配置错误:人员A、B的本地X、Y分支错误绑定了上游(upstream)分支为人员C的远程分支,而非自己对应的目标远程分支。默认执行
git push命令时,Git会自动将代码推送到绑定的上游分支,直接导致提交落到C的分支下。 - 远程分支引用被篡改:人员C执行rebase操作后,本地分支和对应的远程分支出现提交历史分叉,无法执行快进合并,此时如果C执行了
git push --force强制推送,会直接篡改原本对应A、B的远程分支的HEAD指向,使其指向C本地分支的提交节点。后续A、B推送时因本地与远程分支历史分叉,若未校验分支指向就执行强制推送,就会将代码提交到已经被篡改、实际归属C的分支引用下。 - Git推送规则配置异常:如果A、B本地的
push.default配置被修改为非常规值,或错误配置了全局远程推送的目标分支前缀,也会导致所有未明确指定分支参数的推送操作,都默认指向C的远程分支。 - 远程仓库规则配置错误:仓库管理员若错误配置了分支权限映射、分支引用重定向规则,将A、B分支的写入权限映射到了C的分支空间,所有推送到A、B分支的请求都会被自动重定向到C的分支下。
你场景中提到的「未执行快进合并」就是分支历史分叉的典型表现,此时如果不校验当前分支的上游指向、远程分支的归属就执行推送,极容易出现提交错分支的问题。
内容的提问来源于stack exchange,提问作者monster957
相关产品推荐
相关产品推荐

