git push : 可将本地分支精确推送到指定远程分支,如 git push origin feature/login:dev;若仅写 git push origin dev,则要求当前本地分支名为 dev,否则报错。

git push 时指定目标分支的写法
直接用 git push <remote><local-branch>:<remote-branch></remote-branch></local-branch></remote>,比如要把本地 feature/login 推到远程 dev 分支,就运行:
git push origin feature/login:dev。这会把本地分支的最新提交「强制映射」到远程
dev,不关心远程 dev 原来指向哪——它不是合并,也不是快进,就是直接改指针。
为什么不能只写 git push origin dev
这条命令实际等价于 git push origin dev:dev,它只会把**当前所在本地分支**(假设是 main)推到远程 dev,但前提是当前分支名也叫 dev;否则 Git 会报错:src refspec dev does not match any。常见误解是以为它能“把本地当前分支推成远程 dev”,其实不能——Git 不自动重命名分支,必须显式写清楚源和目标。
推送前要确认的三件事
- 本地分支已包含你想要的内容(
git log --oneline -n 5看一眼) - 远程分支名拼写正确(
git ls-remote --heads origin | grep dev可查是否存在) - 没有权限或保护规则拦截(比如 GitHub/GitLab 上
dev是受保护分支,需 PR 合并而非直推)
遇到 non-fast-forward 拒绝怎么办
说明远程 dev 已有你本地没有的提交。此时不能硬推(除非明确需要覆盖),应先同步再决定策略:
— 如果想保留远程新提交:用 git fetch origin dev + git merge origin/dev 或 git rebase origin/dev
— 如果确定要丢弃远程变更(如测试分支误操作):加 -f 强制推送:git push -f origin feature/login:dev,但需确保团队无其他人正在基于该分支工作。











