## git push 推送你的新分支與數據到某個遠端倉庫
想要與他人分享你牛鼻的提交,你需要將改動推送到遠端倉庫。 執行?`git push [alias] [branch]`,就會將你的 [branch] 分支推送成為 [alias] 遠端上的 [branch] 分支。 讓我們試試推送我們的主分支到先前添加的“github”遠端倉庫上去。
~~~
$ git push github master
Counting objects: 25, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (25/25), done.
Writing objects: 100% (25/25), 2.43 KiB, done.
Total 25 (delta 4), reused 0 (delta 0)
To git@github.com:schacon/hw.git
* [new branch] master -> master
~~~
挺簡單。現在如果有人從該倉庫克隆,他會得到我提交的完完全全的一份歷史記錄了。
如果有個像之前創建的“erlang”分支那樣的主題分支,想只分享這個,該怎么辦呢?你可以相應的只推送該分支。
~~~
$ git push github erlang
Counting objects: 7, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 652 bytes, done.
Total 6 (delta 1), reused 0 (delta 0)
To git@github.com:schacon/hw.git
* [new branch] erlang -> erlang
~~~
現在當人們從該倉庫克隆時,他們就會得到一個“erlang”分支以查閱、合并。 用這種方式,你可以推送任何分支到任何你有寫權限的倉庫。 如果你的分支已經在該倉庫中了,它會試著去更新,如果它不再,Git 會把它加上。
最后一個當你推送到遠端分支時會碰到的主要問題是,其他人在此期間也推送了的情況。 如果你和另一個開發者同時克隆了,又都有提交,那么當她推送后你也想推送時,默認情況下 Git 不會讓你覆蓋她的改動。 相反的,它會在你試圖推送的分支上執行?`git log`,確定它能夠在你的推送分支的歷史記錄中看到服務器分支的當前進度。 如果它在在你的歷史記錄中看不到,它就會下結論說你過時了,并打回你的推送。 你需要正式提取、合并,然后再次推送 —— 以確定你把她的改動也考慮在內了。
當你試圖推送到某個以被更新的遠端分支時,會出現下面這種情況:
~~~
$ git push github master
To git@github.com:schacon/hw.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:schacon/hw.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again. See the 'Note about
fast-forwards' section of 'git push --help' for details.
~~~
你可以修正這個問題。執行?`git fetch github; git merge github/master`,然后再推送
> **簡而言之**?執行?`git push [alias] [branch]`?將你的本地改動推送到遠端倉庫。 如果可以的話,它會依據你的 [branch] 的樣子,推送到遠端的 [branch] 去。 如果在你上次提取、合并之后,另有人推送了,Git 服務器會拒絕你的推送,知道你是最新的為止。