1.推送
本地的分支並不會自動與遠程倉庫同步,你可以顯示的向遠程倉庫推送你的分支。例如你在本地創建了一個dev分支,你想其他的人和你一樣在dev之下進行工作,可以使用 git push <remote> <branch> 將自己的分支推送到遠程倉庫。
git push origin dev 即可。
下一次其他的人從服務器上抓取數據的時候,他們會在本地生成一個遠程分支origin/serverfix,指向服務器的serverfix分支的引用。
如果你在推送分支的時候,想給分支另取一個名字,可以使用 git push <remote> <branch>:<remote-branch>
例如 git push <origin> <dev>:<dev-gq> ,將本地的dev分支推送到遠程,並且遠程分支命名為dev-gq。
注意: 當使用git fetch從遠程倉庫抓取到新的遠程跟蹤分支時,本地不會自動生成一份可編輯的副本。換句話說,也就是本地不會自動生成一個新的dev分支,只有一個不可以進行修改的origin/dev分支。
你可以運行 git merge <origin/dev> 將這些跟蹤合並到你正在工作的分支上。當然你也可以在遠程跟蹤分支上新建一個dev分支,git checkout -b dev origin/dev 這句命令會給你再本地新建一個dev分支,並且起點位於origin/dev。
上面兩段話的意思就是,使用git fetch拉取的更新,不會自動被合並到分支中去,workingtree中不會顯示這個分支的修改,可以自己執行git merge <origin/dev>命令將origin/dev的更改合並到當前所在的分支,當然也可以新建一個分支dev,然后merge到新建的本地dev分支中;還有一種辦法是使用git checkout -b dev origin/dev,這個和使用git merge origin/dev dev是相同的效果。
2.跟蹤分支
從遠程跟蹤分支檢出一個本地分支,會自動創建一個跟蹤分支(有時候也叫做上游分支)。如果在一個跟蹤分支上運行git pull,Git能夠知道從哪里去拉取數據。
當克隆一個倉庫的時候,一般會自動創建一個跟蹤origin/master的跟蹤分支master。
git checkout -b <branch> <remote>/<branch> //創建一個跟蹤分支
例子:git checkout -b dev origin/dev
相比於上述命令,Git提供了一個快捷方式來創建跟蹤分支: git checkout --track <remote>/<branch>
例子:git checkout --track origin/dev 在本地創建一個dev跟蹤分支,它起始於origin/dev分支。
如果不想要使用dev這個分支作為本地分支的名字,可以使用 git checkout --track dev-gq origin/dev 將本地分支的名字命名為dev-gq。
設置一個已有的跟蹤分支跟蹤剛剛拉取下來的遠程分支,或者要修改正在跟蹤的上游分支,可以使用git branch帶上-u或者--set-upstream-to參數來進行設置。
例子: git branch -u origin/dev 設置本地跟蹤分支dev,跟蹤遠程跟蹤分支origin/dev。
git branch -vv 會將所有的本地分支列出來,可以看到各個分支正在跟蹤哪個遠程分支,本地分支相對於遠程分支來說,領先或者落后了多少。
$ git branch -vv iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets master 1ae2a45 [origin/master] deploying index fix * serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this should do it testing 5ea463a trying something new
注意:這條命令進行對比的遠程分支是來自於你最后一次從服務器上抓取的數據,並不是最新的數據,這時候,你可以運行
git fetch --all
git branch -vv
來得到最新的數據。
3.拉取
當使用 git fetch 從遠程倉庫抓取數據的時候,它並不會修改工作目錄中的內容,它只會獲取數據,然后需要你自己進行合並。然而,還有一個 git pull 命令,它會查找當前分支所跟蹤的服務器與分支,從服務器上抓取數據,然后嘗試合並進入當前分支。
git pull = git fetch + git merge
4.刪除遠程分支
假設你已經通過遠程分支完成了所有的工作,也就是所遠程分支上的代碼已經合並到了master中,並且這個遠程分支決定以后不再使用,可以使用帶有--delete的git push命令來刪除遠程分支。
git push origin --delete dev //刪除遠程分支dev