做爲TortoiseGit的用戶,在處理遠程分支時,我老是有點困惑。與許多未分發的版本控制系統相比,Git使分支機構的工做變得很是簡單快捷,可是來自TFS或SubVersion的世界,其中分支基本上是一個物理目錄,能夠在Git中籤入和簽出它幾乎只是一個指針。這意味着每一個存儲庫和工做流的分支對於將本地分支推送到遠程存儲庫時是惟一的,或者相反,有點不一樣。安全
使用控制檯處理分支的文檔很是好,可是當我使用TortoiseGit時,我常常在處理遠程分支時感到困惑和不安全。所以我決定進行一些研究和實驗,並記錄彷佛有效的工做流程。服務器
建立本地分支
鑑於咱們已經建立了一個本地存儲庫並添加了一個遠程存儲庫,在個人狀況下是一個GitHub存儲庫,咱們能夠經過右鍵單擊存儲庫中的目錄並選擇Create Branch菜單項來建立本地分支。fetch
而後,咱們進入Create Branch對話框,在其中輸入分支的名稱並單擊OK。網站
除非咱們沒有在Create Branch對話框中選中「切換到新分支」複選框,不然咱們的工做目錄仍然是主分支。要切換到新建立的分支,咱們右鍵單擊並選擇Switch / Checkout菜單項。spa
在下面的對話框中,咱們選擇新建立的本地分支並單擊OK。3d
咱們的工做目錄如今是新建立的分支(在個人例子中是「branch1」)。咱們如今能夠進行一些更改並將它們提交到本地分支。這反映在TortoiseGit右鍵菜單中的Commit菜單項中。版本控制
將本地分支推送到新的遠程分支(在GitHub上)
當咱們想要與其餘人共享咱們的本地分支,或者將其存儲在遠程存儲庫中以備份它或者可以從咱們須要推送的另外一臺計算機中檢索它時。對我而言,這有點使人困惑,由於推送它並不意味着將實際分支推送到遠程存儲庫,而是在遠程存儲庫中建立新分支並推送更改。爲此,咱們使用Push右鍵單擊菜單選項,就像咱們在master分支中工做同樣。指針
在下面的Push對話框中,咱們只需點擊OK便可。
這是讓我最困惑的部分之一。我一直想知道這是否意味着本地分支中的更改不會被推送到遠程存儲庫中的主分支。可是擊中後肯定看着Git的命令進度對話框中咱們能夠看到,TortoiseGit推進本地分行的一個分支,在它還不存在,這將隨後被建立的遠程存儲庫相同的名稱。
將分支推送到GitHub後(若是這是咱們的遠程存儲庫所在的位置),咱們能夠看到它並使用頁面右側的分支按鈕切換到它。
在進行了一些咱們已經提交給本地分支的更改以後,咱們可使用相同的工做流將它們推送到相應的遠程分支。
正如咱們在「命令進度」對話框中看到的那樣,本地分支中的更改將被推送到相應的遠程分支。
獲取遠程分支
當其餘人想從遠程存儲庫中獲取新分支時,咱們本身切換到另外一臺計算機或本地存儲庫後,須要從遠程存儲庫中獲取新分支。有人可能認爲這涉及首先建立一個新的本地分支,而後從遠程分支拉出,但根據個人研究,這不是一個好主意。相反,咱們想要作的是基於遠程分支建立一個新的本地分支。咱們首先選擇Create Branch右鍵菜單選項來完成此操做。
在Create Branch對話框中,咱們能夠根據須要命名咱們的新分支,但爲了不混淆,咱們極可能但願爲它指定與遠程分支相同的名稱。而後訣竅是檢查Base on / Branch單選按鈕並選擇遠程分支。
點擊OK後,咱們獲得一個確認信息,即已建立新的本地分支而且它跟蹤遠程分支。就像以前咱們還須要檢查「切換到新分支」複選框或手動簽出新分支以便開始工做。
在將更改提交到本地分支後,咱們可使用「推送」右鍵單擊菜單選項將更改推送到遠程分支。可是,咱們須要確保在「推送」對話框的「遠程」下拉列表中選擇了正確的分支。
合併
一旦咱們想要將分支中的更改合併到主分支中,咱們使用Checkout / Switch右鍵單擊菜單選項檢出主分支。
而後咱們使用Merge右鍵菜單選項...
...打開咱們選擇從本地分支合併的Merge對話框。
完成合並後,咱們能夠將更改(合併)從本地主服務器推送到遠程主服務器分支。
而後遠程存儲庫將弄清楚發生了什麼,若是咱們查看GitHub中的Network選項卡,它將顯示爲咱們一直在使用的分支從未存在(或多或少)。
刪除本地分支
若是咱們在將它合併到master以後完成了咱們的分支,或者因爲其餘緣由咱們想要丟棄分支,咱們能夠經過首先打開Checkout / Switch對話框來獲取Browse refs對話框來刪除本地分支。
在Browse refs對話框中,咱們能夠右鍵單擊本地分支並選擇刪除它。
刪除遠程分支
要刪除遠程分支,咱們能夠作一樣的事情,但不是右鍵單擊咱們的本地分支,而是在對話框左側展開遠程樹,而後找到遠程分支。
放棄
我不是Git的專家(雖然我但願有一天)因此若是你在這篇文章中看到錯誤,請不要猶豫,讓我知道!不過,這個工做流程彷佛對我有用。
PS。有關新帖子的更新,我發現有用的網站以及偶爾的咆哮,您能夠在Twitter上關注我。您也能夠訂閱RSS-feed。