序
在使用git push之前,我们最起码要知道本地和远程的概念,以及他们的关系。本地分为工作目录、暂存区和本地仓库,远程可以有很多仓库,也叫作主机。我们只有将修改后的代码commit到本地仓库,才能使用push命令推送到远程指定的主机中。
格式 (很重要)
push
命令的作用是将本地当前分支的代码推送到远程指定的分支上,在多人协作中,小组成员就能在远程主机中看到自己修改的代码了。命令的格式如下:
git push <远程主机名> <本地分支名>:<远程分支名>
牢记格式很重要,很多初学者没有添加后面的参数,使用git push
也能完成推送功能,但其实省略参数只能在特定的环境中生效,恰巧你当时的环境正合适。如果换了分支或者远程主机,就会导致很麻烦的问题。命令格式也很好记,可以理解为,使用git push
命令将<本地分支名>
的代码推送到<远程主机名>
中的<远程分支名>
上。
<远程主机名>
:指的是你想要推送到哪个远程主机中,在我们克隆一个项目的时候,git会自动帮我们把远程主机起名为origin
,一般情况下是不会去修改这个名字的。我们可以使用remote
命令来添加多个远程主机,那么什么时候会添加多态远程主机呢?感兴趣可以看这篇文章:还没有写<本地分支名>
:这个很好解释,就是你本地分支的名字,如果对git分支还不了解分支,可以看这篇文章:还没有写。可以使用命令git branch
来查看本地都有哪些分支,结果如下图,意思是我本机一共有两个分支:master和dev,master
分支前面加了*
号,表示当前处于master
分支。
<远程分支名>
:指的是远程主机中的分支名,如果远程主机没有这个分支,则会新创建一个。
常用写法
有几种很常见的push操作,在这里列出来
1. 正常写法
填写所有的参数,这么写比较清晰明了,不容易弄混,适合<本地分支名>
和<远程分支名>
不一样的情况。举个栗子:
git push origin dev:test
意思是将本地的dev
分支上的代码推送到远程主机名为origin
中test
的分支上。如果远程的test
分支不存在,则会被创建,这也是一种创建远程分支的办法。
2.省略:<远程分支名>
如果本地分支名和远程分支名一样的情况下,可以省略:<远程分支名>
。如果远程主机中不存在该分支,那么会被创建。我们就可以使用命令:
git push origin dev
来代替
git push origin dev:dev
3.省略<远程主机名>和:<远程分支名>
如果本地分支已经跟远程分支建立了追踪关系,那么可以省略<远程主机名>
和:<远程分支名>
。
使用git branch -vv
命令,可以查看本地分支跟远程分支是否存在追踪关系,如下图所示,本地dev
分支跟远程origin/dev
分支存在追踪关系,本地master
分支跟远程origin/master
分支有追踪关系。
此时可以看到我们当前处于master
分支,因此就可以使用命令:
git push origin
来代替:
git push origin master:master
如果当前分支没有追踪关系的远程分支会出现什么结果呢?我们来创建一个新的分支,并将其设置为当前分支。
使用命令git checkout -b stt
创建一个新的分支stt
,参数-b
的意思是将新创建的分支设置为当前分支。然后使用git push origin
看能不能推送到远程。结果如下图:
我们发现出现一个fatel
错误,提示说找不到上游的分支,意思就是远程没有与当前分支对应的追踪关系,需要用命令git push --set-upstream origin stt
先建立关系才行。输入这条命令之后发现,git会将本地stt
分支推送到了远程的stt
分支上,并建立了两个的追踪关系。
4.省略<远程主机名> <本地分支名>:<远程分支名>
在之前的命令中,我们都会添加<远程主机名>
来指定要推送到哪一台主机上,但如果连主机名都不想写,可以吗?当然可以,我们只需要保证本地仓库只跟一台远程主机有关联即可。其实我们在正常的开发中,远程主机确实只有一个,那就是我们克隆的远程项目的主机。如果不使用特殊的操作,根本用不着跟其他主机建立联系。
假如我们当前的分支是在dev下面,所以我们就可以通过命令
git push
来代替命令:
git push origin dev:dev
假如后来我们新增了一台或者多台远程主机,主机2、主机3、主机4…等等,那么在使用push
命令的时候就必须要加上<远程主机名>
这个参数了
以上就是所有关于git push
命令的详解
小福利
海量编程资源:https://shimo.im/docs/0l3NVZX6l6tB7D3R/
承诺所有资源不收任何费用,没有任何套路!如果觉得有用希望可以点个赞+评论,感谢支持!