🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## git push <远程主机名> <本地分支名>:<远程分支名> ``` git push origin master ``` 如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建 ``` git push origin ``` 如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支 ``` git push ``` 如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名 ## git push 的其他命令 这几个常见的用法已足以满足我们日常开发的使用了,还有几个扩展的用法,如下:     ``` git push -u origin master ``` 如果当前分支与多个主机存在**追踪关系**,则可以使用 **-u** 参数指定一个默认主机,这样后面就可以不加任何参数使用git push,不带任何参数的git push,默认只推送当前分支 ``` git push --force origin branch ``` git push的时候需要本地先git pull更新到跟服务器版本一致,如果本地版本库比远程服务器上的低,那么一般会提示你git pull更新,如果一定要提交,那么可以使用这个命令。 > 上面命令使用`--force`选项,结果导致远程主机上更新的版本被覆盖。除非你很确定要这样做,否则应该尽量避免使用`--force`选项。这个命令应该谨慎使用,通常用在开发功能分支rebase线上master之后,功能开发分支的commmit基点可能发生改变,需要-f强推到 功能开发分支 #### 那么`git push --force`命令有什么安全问题? `--force`会使用本地分支的提交覆盖远端推送分支的提交。也就是说,如果其他人在相同的分支推送了新的提交,你的这一举动将“删除”他的那些提交!就算在强制推送之前先`fetch`并且`merge`或`rebase`了也是不安全的,因为这些操作到推送之间依然存在时间差,别人的提交可能发生在这个时间差之内。 #### `--force-with-lease`将解决这种安全问题 ``` git push --force-with-lease origin branch ``` 使用了`--force-with-lease`参数之后,上面那种安全问题就没有那么危险了。 使用此参数推送,如果远端有其他人推送了新的提交,那么推送将被拒绝,这种拒绝和没有加`--force`参数时的拒绝是一样的。 ## 创建本地分支和远程分支的关联关系 切换分支到 mybranch1 设置本地分支和远程分支的关联关系,并推送本地分支内容到远端: ``` git push -u origin mybranch1 相当于 git push --set-upstream origin mybranch1 ``` 或者只设置本地分支和远程分支的关联关系 ``` git branch --set-upstream-to=origin/mybranch1 mybranch1 ``` 这样 git push 直接推送相当执行 git push origin XXX