Git使分支變得容易。來自其他版本控制系統的工作流程並不總是那么容易理解。這是我在使用Tortoise Git時發現的效果。
作為TortoiseGit的用戶,在處理遠程分支時,我總是有點困惑。與許多未分發的版本控制系統相比,Git使分支機構的工作變得非常簡單快捷,但是來自TFS或SubVersion的世界,其中分支基本上是一個物理目錄,可以在Git中簽入和簽出它幾乎只是一個指針。這意味着每個存儲庫和工作流的分支對於將本地分支推送到遠程存儲庫時是唯一的,或者相反,有點不同。
使用控制台處理分支的文檔非常好,但是當我使用TortoiseGit時,我經常在處理遠程分支時感到困惑和不安全。因此我決定進行一些研究和實驗,並記錄似乎有效的工作流程。
創建本地分支
鑒於我們已經創建了一個本地存儲庫並添加了一個遠程存儲庫,在我的情況下是一個GitHub存儲庫,我們可以通過右鍵單擊存儲庫中的目錄並選擇Create Branch菜單項來創建本地分支。
然后,我們進入Create Branch對話框,在其中輸入分支的名稱並單擊OK。
除非我們沒有在Create Branch對話框中選中“切換到新分支”復選框,否則我們的工作目錄仍然是主分支。要切換到新創建的分支,我們右鍵單擊並選擇Switch / Checkout菜單項。
在下面的對話框中,我們選擇新創建的本地分支並單擊OK。
我們的工作目錄現在是新創建的分支(在我的例子中是“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。