无参数git push的作用是什么?git push与git push origin master是否等效?
Git Push: 无参数 vs
git push origin master 详解 Hey there! Let's break down your two questions about git push clearly, no jargon overload.
一、无参数执行git push时会做什么?
其实无参数的git push行为不是固定的,它完全取决于你Git配置里的push.default选项(可以用git config --get push.default查看当前设置),同时还要看当前分支有没有设置「上游分支」(也就是和远程仓库的对应分支关联)。
下面是最常见的几种push.default配置对应的行为:
- simple(Git 2.0+ 默认值):这是最安全的模式,只会推送当前分支到它对应的上游分支,但有两个前提:
- 当前分支和上游分支必须同名
- 上游分支所在的远程仓库必须存在
如果当前分支没设置上游(可以用git branch -vv查看),无参数push会直接报错,提示你先通过git push --set-upstream <远程名> <分支名>关联上游。
- upstream:和
simple类似,但允许当前分支和上游分支不同名,只要关联了上游,就会推送到对应的上游分支。 - matching:比较古老的模式,会推送所有本地和远程同名的分支到远程仓库。比如你本地有
master、dev两个分支,远程也有这两个分支,无参数push会同时把这两个分支都推上去,风险比较高,现在很少用了。
二、git push origin master 和无参数git push功能完全一致吗?
答案是:只有在特定场景下一致,大多数时候不一样。
一致的场景
只有当同时满足以下所有条件时,两者效果才相同:
- 当前分支就是
master master分支已经关联了上游分支origin/master(用git branch -vv能看到master后面跟着origin/master)push.default设置为simple或upstream
这种情况下,无参数git push就是把本地master推送到origin/master,和git push origin master完全一样。
不一致的场景
只要不满足上面任意一个条件,两者行为就会有差异:
- 场景1:当前分支是
dev,且已经关联了origin/dev
无参数git push会推送本地dev到origin/dev,而git push origin master会推送本地master到origin/master,完全是两个不同的操作。 - 场景2:
push.default设置为matching
无参数git push会推送所有本地和远程同名的分支(比如master、dev、test),而git push origin master只推送master分支,差异巨大。 - 场景3:当前分支
master没有关联上游分支
无参数git push会直接报错,而git push origin master会直接把本地master推送到远程origin的master分支(如果远程没有master,就会创建)。
总结
无参数git push是「智能推送」,行为依赖配置和当前分支状态;而git push origin master是「明确推送」,不管当前环境如何,都会把本地master推送到远程origin的master分支。两者只有在特定条件下才会功能一致,大部分时候是不同的。
内容的提问来源于stack exchange,提问作者Bob5421
相关产品推荐
相关产品推荐

