git push 不等于发起合并请求,因为 Git 本身无 MR 概念,仅管理分支指针;MR 是 Git 托管平台(如 GitLab)提供的协作功能,需在平台手动或通过 CLI(如 glab)显式创建。

提交代码后不能直接“发起合并请求”,git push 只是把本地分支推到远程仓库,合并请求(MR / PR)是独立于 Git 命令的协作动作,必须在代码托管平台(如 GitLab、GitHub、Gitea)上显式创建。
为什么 git push 不等于发起合并请求
Git 本身没有“合并请求”概念,它只负责版本快照和分支指针管理。合并请求是 Git 托管平台(如 GitLab)基于 Git 数据实现的协作功能,用于触发评审、CI 检查、权限控制等流程。你 git push origin feature/login 后,远程分支确实存在了,但平台不会自动为你创建 MR —— 这一步必须人工或脚本主动触发。
在 GitLab 上手动创建 Merge Request 的关键操作点
这是最常见也最容易出错的路径:
Git post-commit 钩子 + SQLite 提交索引工具。自动将每次提交的元数据(哈希值、作者、分支、仓库、主题)记录到本地 SQLite 数据库中,随后提供一个命令行接口(CLI),支持查询、列表展示、统计、删除和更新记录。 触发场景:管理 Git 钩子、跨仓库查询提交历史、定位某次提交所属的仓库、查看提交统计信息、将提交记录写入本地索引。 当用户提及“提交日志记录”、“提交索引”、“跨仓库查找提交”、“Git 钩子管理”,或希望以结构化方式查询其提交历史时(即使未明确指出该工具),请使
- 确保你已成功推送分支:
git push origin feature/login,且该分支在 GitLab 项目页面的Repository → Branches中可见 - 不要点击项目首页的 “New merge request” 按钮(它默认用
main作 source,容易选反);正确入口是:进入Merge Requests → New merge request - 在创建页中,source branch 选你的功能分支(如
feature/login),target branch 选目标分支(如develop或main),平台会立即比对并提示是否可自动合并 - 填写有意义的
Title(不是“合并代码”,而是“feat: 登录页增加微信扫码按钮”)和Description(含改动说明、关联 issue、测试方式) - 如果目标分支是保护分支(如
main),你无法直接合并,MR 提交后需等待审批;此时别忘了在Assignees或Reviewers中添加对应同事
用命令行快速发起 MR(GitLab CLI)
如果你常用终端,可以避免切网页:
- 先安装
glab(GitLab 官方 CLI):brew install glab(macOS)或参考https://gitlab.com/gitlab-org/cli - 认证登录:
glab auth login,按提示完成 token 绑定 - 直接创建 MR:
glab mr create --source-branch feature/login --target-branch develop --title "feat: 微信扫码登录" --description "见 PR 描述模板" - 注意:
--target-branch必须是已存在的远程分支名,且你有读取权限;若报branch not found,先确认git push是否成功、分支名拼写是否一致(大小写敏感)
常见失败场景与绕过方法
你点了“Create merge request”却看不到按钮、或提示“no changes to compare”,大概率是以下情况:
-
source和target分支完全相同(比如都选了main)→ 检查分支名,确认 source 是你的新分支 - 你推送的是
refs/heads/feature/login,但平台里显示为feature%2Flogin(URL 编码)→ 这是 GitLab 对/字符的转义,不影响使用,但创建 MR 时仍要填原始分支名feature/login - 目标分支设置了
require approval或allow only maintainers to push,但你没被加进项目成员 → 联系管理员检查你的角色权限(Developer可建 MR,Reporter不行) - 本地分支已合并进
main,但你又推了一次空提交 → 平台判定无差异,拒绝创建 MR;此时应删掉本地冗余提交,或改用git merge --no-ff保留 merge commit 痕迹
真正容易被忽略的点是:MR 的生命周期独立于本地分支。你删掉本地 feature/login,远端 MR 依然存在;反之,MR 合并后,远端 feature/login 分支默认不会自动删除 —— 这个清理动作得手动点或配 CI 自动做。

















