關於git
push
命令
git
push
命令用於將本地分支的更新,推送到遠程主機 它的格式與git
pull
命令相仿
$ git push <遠程主機名> <本地分支名>:<遠程分支名>
- 注意 分支推送順序的寫法是
<來源地>:<目的地>
- 所以
git
pull
是<遠程分支>:<本地分支>
而git
push
是<本地分支>:<遠程分支>
- 如果省略遠程分支名,則表示將本地分支推送與之存在”追蹤關係”的遠程分支(通常兩者同名)
- 如果該遠程分支不存在,則會被新建
$ git push origin master
- 上面命令表示
- 將本地的master分支 推送到origin主機的master分支 如果後者不存在,則會被新建
- 如果省略本地分支名,則表示刪除指定的遠程分支,因爲這等同於推送一個空的本地分支到遠程分支
$ git push origin :master
// 等同於
$ git push origin --delete master
- 如果當前分支與遠程分支之間存在追蹤關係,則本地分支和遠程分支都可以省略
$ git push origin
- 如果當前分支只有一個追蹤分支,那麼主機名都可以省略
$ git push
- 如果當前分支與多個主機存在追蹤關係 則可以使用
-u
選項指定一個默認主機 - 這樣後面就可以不加任何參數使用
git
push
$ git push -u origin master
- 上面命令表示
- 將本地的master分支推送到origin主機 同時指定origin爲默認主機
- 後面就可以不加任何參數使用
git
push
了
- 不帶任何參數的
git
push
默認只推送當前分支 這叫做simple
方式 - 此外 還有一種
matching
方式
會推送所有有對應的遠程分支的本地分支 - git 2.0版本之前,默認採用
matching
方法,現在改爲默認採用simple
方式 - 如果要修改這個設置,可以採用
git
config
命令
$ git config --global push.default matching
// 或者
$ git config --global push.default simple
- 還有一種情況 就是不管是否存在對應的遠程分支 將本地的所有分支都推送到遠程主機 這時需要使用
--all
選項
$ git push --all origin
- 上面命令表示
- 將所有本地分支都推送到origin主機
- 除非特殊情況 我不太建議用這種方式
- 如果遠程主機的版本比本地版本新 推送時git會報錯 會要求先在本地做
git
pull
合併差異 - 然後再推送到遠程主機 這時,如果你一定要推送,可以使用
--force
選項
$ git push --force origin
- 上面命令使用
--force
選項
- 結果導致在遠程主機產生一個”非直進式”的合併(non-fast-forward merge)
- 除非你很確定要這樣做 否則應該儘量避免使用
--force
選項 - 目前accuvally
嚴禁
使用這種方式
如有需要 需要整個team商議決定
- 最後
git
push
不會推送標籤(tag),需要明確推送tag名或使用--tags
選項
$ git push origin v1.0 // v1.0 是個tag
// 或者
$ git push origin --tags