## 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