添加遠程倉庫
你首先需要有一個遠程倉庫,我是在 碼云上創建的項目,你也可以使用比較洋氣的GitHub
運行 git remote add <shortname> <url>
添加一個新的遠程 Git 倉庫,同時指定一個你可以輕松引用的簡寫:
$ git remote add testGit git@git.oschina.net:IyayuProject/TestGit.git
解釋:
1.IyayuProject是你的用戶名,而TestGit則是你的項目名。
2.添加遠程倉庫后,testGit是你的遠程倉庫的名字,它同時也用來引用遠程倉庫的URL。
注意:
添加遠程倉庫前,你必須先有一個本地庫,在本地庫中添加遠程操作。
我個人的理解就是將本地倉庫和遠程倉庫進行了關聯。
從遠程倉庫中抓取數據
運行 git fetch [remote-name]
命令會訪問遠程倉庫,從中抓取所有你還沒有的數據(其實就是將遠程服務器的更新取回本地)。 執行完成后,你將會擁有那個遠程倉庫中所有分支的引用,可以隨時合并或查看。
注意:可以使用git merge
命令或者git rebase
命令,在本地分支上合并遠程分支。
如果只想取回特定分支的更新,可以指定分支名。
$ git fetch <遠程主機名> <分支名>
比如,取回origin
主機的master
分支。
$ git fetch origin master
所取回的更新,在本地主機上要用"遠程主機名/分支名"的形式讀取。比如origin
主機的master
,就要用origin/master
讀取。
$ git log origin/master
如果你使用clone
命令克隆了一個倉庫,命令會自動將其添加為遠程倉庫并默認以 “origin” 為簡寫。 所以,git fetch origin
會抓取克隆(或上一次抓取)后新推送的所有工作。
必須注意git fetch
命令會將數據拉取到你的本地倉庫 - 它并不會自動合并或修改你當前的工作。 當準備好時你必須手動將其合并入你的工作。
如果你有一個分支設置為跟蹤一個遠程分支,可以使用git pull
命令來自動的抓取然后合并遠程分支到當前分支。
默認情況下,git clone
命令會自動設置本地master
分支跟蹤克隆的遠程倉庫的master
分支(或不管是什么名字的默認分支)。 運行git pull
通常會從最初克隆的服務器上抓取數據并自動嘗試合并到當前所在的分支。
git pull
命令的作用是,取回遠程主機某個分支的更新,再與本地的指定分支合并。
$ git pull <遠程主機名> <遠程分支名>:<本地分支名>
比如,取回origin
主機的next
分支,與本地的master
分支合并,需要寫成下面這樣。
$ git pull origin next:master
如果遠程分支是與當前分支合并,則冒號后面的部分可以省略。
$ git pull origin next
上面命令表示,取回origin/next
分支,再與當前分支合并。實質上,這等同于先做git fetch
,再做git merge
。
$ git fetch origin$ git merge origin/next
推送到遠程倉庫
當你想分享你的項目時,必須將其推送到上游。
這個命令很簡單:$ git push <遠程主機名> <本地分支名>:<遠程分支名>
。當你想要將master
分支推送到origin
服務器時(再次說明,克隆時通常會自動幫你設置好那兩個名字),那么運行這個命令就可以將你所做的備份到服務器:
$ git push origin master
只有當你有所克隆服務器的寫入權限,并且之前沒有人推送過時,這條命令才能生效。 當你和其他人在同一時間克隆,他們先推送到上游然后你再推送到上游,你的推送就會毫無疑問地被拒絕。 你必須先將他們的工作拉取下來并將其合并進你的工作后才能推送。
注意,分支推送順序的寫法是<來源地>:<目的地>,所以
git pull
是<遠程分支>:<本地分支>,而git push
是<本地分支>:<遠程分支>。
如果省略遠程分支名,則表示將本地分支推送與之存在"追蹤關系"的遠程分支(通常兩者同名),如果該遠程分支不存在,則會被新建。
$ git push origin master
上面命令表示,將本地的master
分支推送到origin
主機的```master``分支。如果后者不存在,則會被新建。
如果省略本地分支名,則表示刪除指定的遠程分支,因為這等同于推送一個空的本地分支到遠程分支。
$ git push origin :master
# 等同于
$ git push origin --delete master
上面命令表示刪除origin
主機的master
分支。
如果當前分支與遠程分支之間存在追蹤關系,則本地分支和遠程分支都可以省略。
$ git push origin
上面命令表示,將當前分支推送到origin
主機的對應分支。
如果當前分支只有一個追蹤分支,那么主機名都可以省略。
$ git push
如果當前分支與多個主機存在追蹤關系,則可以使用-u
選項指定一個默認主機,這樣后面就可以不加任何參數使用git push
。
$ git push -u origin master
上面命令將本地的master
分支推送到origin
主機,同時指定origin
為默認主機,后面就可以不加任何參數使用git push
了。
還有一種情況,就是不管是否存在對應的遠程分支,將本地的所有分支都推送到遠程主機,這時需要使用--all
選項。
$ git push --all origin
上面命令表示,將所有本地分支都推送到origin
主機。
如果遠程主機的版本比本地版本更新,推送時Git會報錯,要求先在本地做git pull
合并差異,然后再推送到遠程主機。這時,如果你一定要推送,可以使用--force
選項。
$ git push --force origin
上面命令使用--force
選項,結果導致遠程主機上更新的版本被覆蓋。除非你很確定要這樣做,否則應該盡量避免使用--force
選項。
最后,git push
不會推送標簽(tag),除非使用--tags
選項。
$ git push origin --tags