推送至远程仓库时,两类Git推送拒绝消息的差异解析
Git两类推送拒绝消息的差异对比
1. "远程包含本地未有的内容" 错误
对应的中文错误输出:
! [rejected] feature/addition -> feature/addition (先拉取) error: 推送部分引用到 'github.com:<github用户名>/<仓库名>.git' 失败 hint: 更新被拒绝,因为远程仓库包含本地没有的内容。这通常是因为其他仓库向同一个引用推送了内容。 hint: 你可能需要先整合远程的变更(例如执行 `git pull ...`),然后再重新推送。 hint: 详情请查看 'git push --help' 中的「关于快进的说明」。
- 触发场景:远程分支存在本地完全没有的独立提交,本地与远程的提交历史出现分叉(并行开发),Git无法通过快进合并完成推送。
- 核心特征:远程有本地未同步的、和本地提交无继承关系的新历史。
2. "当前分支的尖端落后于远程对应分支" 错误
对应的中文错误输出:
! [rejected] feature/addition -> feature/addition (非快进) error: 推送部分引用到 'github.com:<github用户名>/<仓库名>.git' 失败 hint: 更新被拒绝,因为当前分支的尖端落后于远程对应的分支。请先整合远程的变更(例如 hint: 执行 `git pull ...`),然后再重新推送。 hint: 详情请查看 'git push --help' 中的「关于快进的说明」。
- 触发场景:本地分支的提交历史是远程分支的子集,远程分支在本地最后一次拉取的提交基础上新增了后续提交,本地分支的最新提交(尖端)在远程分支的提交序列之前,属于线性落后。
- 核心特征:本地提交完全包含在远程历史中,只是远程比本地多了后续的线性提交。
核心差异总结
- 错误标识:前者标注为
(fetch first),后者标注为(non-fast-forward) - 提交历史关系:前者是本地与远程历史分叉(并行提交),后者是本地历史是远程的线性子集
- 触发原因:前者多由多开发者并行推送同一分支导致,后者多因本地未及时拉取远程更新导致
内容的提问来源于stack exchange,提问作者Alexis
相关产品推荐
相关产品推荐

