上篇介紹了一款Windows環境下的Git服務器工具GitStack ,搭建了最簡單的Windows下的Git服務器,須要再次提醒的是GitStack是打包了相對較穩定的Git原生版本的,喜歡使用命令行的同窗,並不影響你。GitStack僅僅是提供了一套界面化操做和一個Http服務。本篇將深刻介紹如何使用強大客戶端Git工具TortoiseGit進行分支切換、合併等操做。html
1. 建立分支web
分支在Git中能夠說很是的方便實用,首先咱們在什麼狀況下須要建立分支呢?安全
在這點上Git和SVN理念上就有差別。SVN的分支通常做爲管理員事先分配好分支的用途,開發人員不能隨意建立。而Git你想建就建吧,你本身知道分支是什麼就行。服務器
Git中每一個開發者最好都有一個本身的分支。而後能夠再建立分支做爲階段備份,做爲試驗品,幹什麼都行。最後,你把你的試驗成果合併到本身的分支上。再而後若是本身的分支相對穩定,再提交到主幹上。分佈式
固然master是否採納你的分支所有或部分,這是master的工做。這樣的自由開發方式,是否是心動了呢,繼續看下去吧!工具
話很少說,咱們直入主題,下面看下如何建立一個分支。學習
在項目 主文件夾右擊或打開主項目文件件,在空白處右擊,選擇TortoiseGit,選擇創「建立分支」測試
輸入一個分支名稱,"Yu_V1"表示我我的的第一個版本,下面切換到新分支若是選中,建立完成後,工做環境將切換到新分支了,若是沒選,也能夠很方便的切換spa
完成分支建立之後,咱們更新增一個文件「個人第四個文件.txt」命令行
新建文件後,咱們在空白區域右擊,發現提交默認變成了 提交到 Yu_V1
進入提交,輸入備註,選中新建的文件四,在這個窗口能夠看到當前所要提交的分支名稱
2. 切換分支
這時,若是咱們要回到主幹怎麼辦呢,Git的分支切換很是方便
項目目錄空白處右擊,TortoiseGit=> 切換/檢出
在切換窗口,咱們能夠很方便的切換到任一分支,假如咱們切換到master
咱們會發現,分支Yu_V1中第四個文件沒有了,右擊空白,會發現切換到了master.
第四個文件並不會丟失,當咱們再次切換回分支Yu_V1的時候,第四個文件又會回來了
這就是Git強大的地方,他在服務器上存儲了一個文件庫(以元數據方式存儲),再存儲了一個版本及分支更改等的變動信息庫,每次咱們切換的時候向服務端發送了一個請求,服務端則根據咱們的請求變動咱們的項目中的文件。
整個過程就是快速的傳輸,服務器上並不會一一存儲各個分支的文件副本,這也是Git服務端版本庫不會暴增的主要緣由。
(我會在介紹過程當中,慢慢把Git的工做原理切入進來)
3. 查看日誌
項目目錄空白處右擊,TortoiseGit=> 顯示日誌
如上圖,在打開的顯示日誌窗口中,咱們能夠看到若是建立了分支,日誌信息中會在變動信息前顯示一個分支名稱,以方便咱們瞭解是哪個分支的變動
咱們再次建一個文件,建立一個新分支Yu_V2,將新建的文件提交到該分支,再次查看日誌
能夠看到紅色表示當前所在分支,綠色表示其餘分支變動信息
4. 查看版本分支圖
項目目錄空白處右擊,TortoiseGit=> 查看版本分支圖
在打開的分支圖窗口中,能夠看到版本分支的建立歷史流程
5. 合併分支
項目目錄空白處右擊,TortoiseGit=> 合併
在彈出的合併窗口中,咱們先選擇一個分支,合併至當前分支(這裏必定要注意,合併關係,若是要最終合併到那個分支,先切換到該分支,再選一個合併目標)
提示合併完成,是否是很是簡單。
6. 刪除分支和分支改名
項目目錄空白處右擊,TortoiseGit=> 切換/檢出
在切換界面中,分支選擇後面的選擇按鈕打開,如上圖右側窗口,能夠更新和刪除某個分支,注意,不能刪除當前分支,若是要刪除當前分支,請換到到其餘分支進行操做
7. 推送
項目目錄空白處右擊,TortoiseGit=> 推送
在推送窗口中,若是選擇 推送全部分支,則本地庫中全部分支都被推送到服務器,默認爲推送當前分支。咱們能夠選擇推送到其餘分支,而提交只能提交到遠程的對應分支或新建分支。
咱們能夠隨時在服務器端GitStack中查看咱們的項目提交狀況
打開GitStack,找到咱們建立的版本庫"MyGitObject",點擊右邊的「瀏覽」按鈕,以下圖
在服務端,咱們能夠很方便的查看推送到服務器的文件及分支信息。
8. 更新版本庫
前面咱們已經熟悉了從遠程服務器克隆一個版本庫到本地及從本地推送給Git,在項目推動過程當中,咱們如何及時獲取其它分支的更新內容呢,接下來將介紹這點。
關於更新本地庫,這裏有兩個操做,若是你是中文版本的TortoiseGit很容易搞錯,這就是語言差別。
中文版本 分別爲 拉取和獲取 對應英文版爲 Pull(拉取)和Fetch(獲取)
在這裏一塊兒介紹這兩個指令,他們有什麼區別呢?
從安全角度來講,Fetch更安全,由於咱們能夠 先Fetch新版本,而後進行差別比較後,再選擇性的 Merge 。這也是推薦作法,即先Fetch到一個本地副本分支,而後將該副本分支和本地版本比較,合併後,再提交到遠程主機。
獲取和拉取的操做很簡單
項目目錄空白處右擊,TortoiseGit=> 拉取(Pull)
項目目錄空白處右擊,TortoiseGit=> 獲取(Fetch)
9. 差別比較
9.1 比較分支版本差別
咱們該如何查看分支1和分支2的差別呢?TortoiseGit爲咱們提供了很方便的功能
項目目錄空白處右擊,TortoiseGit=> 查看日誌
9.2 比較同一分支當前版本和上一版本差別
項目目錄空白處右擊,TortoiseGit=> 比較與上一版本差別
9.3 比較兩個文件差別
選中項目中兩個文件 右擊,TortoiseGit=> 比較差別
打開文件差別比較窗口,以下
也能夠在某個文件上右擊,選擇」與上一版本差別「來查看某個文件的更改內容
10. 還原
若是某次操做咱們後悔了,可使用還原,將還原到上次提交前的狀態。
項目目錄空白處右擊,TortoiseGit=> 還原
注意:還原只能還原到最近一次提交時的狀態, 以前提交的的版本怎麼還原呢,也是有辦法的,以下:
項目目錄空白處右擊,TortoiseGit=> 查看日誌
選中一個歷史版本,右擊,點」重置到這個版本「將把版本回退到以前的版本。
11. Git中解決衝突
使用Git這種非鎖定式的版本控制系統之後,不少初學者都有解決衝突恐懼症,分佈式的開發給咱們帶來便利的同時,產生衝突也是正常的。所謂防範勝於救災,咱們能夠避免,如何避免呢?
(1)首先團隊在開發過程當中須要有明確規範;
(2)開發人員須要及時獲取新版本;
(3)修改後,必定要及時遞交;
即便作到以上三點,仍然會有衝突的存在,解決衝突並不可怕,經過上面的介紹,咱們能夠看到GIT給咱們提供了許多輔助功能,好比文件差別比較,版本差別比較等。咱們要充分利用這些便利解決問題。
通常衝突主要有三種:邏輯衝突、樹衝突、內容衝突
這三種衝突如何應對呢?
(1)邏輯衝突
產生緣由:好比A方法做用是返回從0-5的隨機數1個,可是同事在沒有更改方法名的狀況下,改爲了方法返回6-9的隨機數1個。若是拉回同事提交的版本庫,應用該方法後,就會出現程序邏輯錯誤。
解決辦法:首先咱們在使用獲取一個副本支的方式更好,避免了這一問題,若是衝突,咱們能夠獲取版本後,使用恢復功能,或修改衝突再提交。溝通很重要,通常這種BUG都是事先沒有溝通好。
(2)樹衝突
產生緣由:兩我的同時修改一個文件名
解決辦法:其中一我的獲取新版本,而後刪除本身改過名的文件,雙方協商好用什麼名字,再由其中一人更改,另外一人獲取新版本便可。
(3)內容衝突
產生緣由:兩我的同時改了同一文件的同一位置內容
解決辦法:提交文件產生這種衝突時,咱們利用文件差別比較,查看兩個文件內容衝突的位置手動更改,而後推送到服務器。
12. 分支管理策略
Git在分支建立和合並上爲咱們帶來史無前例的便利,同時版本四處開花,分支遍地,很容易讓初次使用者找不到主幹發展方向。這就須要咱們學習一下工做流,Git的工做流網上有不少大神介紹,本篇文章不能一一列舉了。可是Vincent Driessen的分支管理策略獲得了衆多支持者。咱們分享一下他的成果。
他的策略可使版本庫演進保持簡潔、主幹清晰、分支各司其職。
(1) Master分支(主分支)
首先,代碼庫應該有一個、且僅有一個主分支。全部提供給用戶使用的正式版本,都在這個主分支上發佈。Git主分支的名字,默認叫作Master。它是自動創建的,版本庫初始化之後,默認就是在主分支在進行開發。咱們能夠給主分支上的每一個版本庫打上tag,爲了更好的管理。
(2)開發分支Develop
主分支只用來分佈重大版本,平常開發應該在另外一條分支上完成。咱們把開發用的分支,叫作Develop。
若是想正式對外發布,就在Master分支上,對Develop分支進行」合併」(merge)。
(3)臨時性分支
前面講到版本庫的兩條主要分支:Master和Develop。前者用於正式發佈,
後者用於平常開
發。其實,常設分支只須要這兩條就夠了,不須要其餘了。可是,除了常設分支之外,還有一些臨時性分支,用於應對一些特定目的的版本開發。臨時性分支主要有三種: * 功能(feature)分支
* 預發佈(release)分支
* 修補bug(fixbug)分支
這三種分支都屬於臨時性須要,使用完之後,應該刪除,使得代碼庫的常設分支始終只有Master和Develop。
功能分支
第一種是功能分支,它是爲了開發某種特定功能,從Develop分支上面分出來的。開發完成後,要再併入Develop。
預發佈分支
第二種是預發佈分支,它是指發佈正式版本以前(即合併到Master分支以前),咱們可能須要有一個預發佈的版本進行測試。
預發佈分支是從Develop分支上面分出來的,預發佈結束之後,必須合併進Develop和Master分支。它的命名,能夠採用release-*的形式。
修補Bug分支
最後一種是修補bug分支。軟件正式發佈之後,不免會出現bug。這時就須要建立一個分支,進行bug修補。修補bug分支是從Master分支上面分出來的。修補結束之後,再合併進Master和Develop分支。它的命名,能夠採用fixbug-*的形式。
合併完成之後的修補Bug分支要刪除的。
對於分支管理策略,我推薦一篇文章,能夠參考一下:http://www.cnblogs.com/cnblogsfans/p/5075073.html
13. 本篇要點
本篇主要介紹了Git的分支、合併、分支切換、差別比較、衝突解決等,使用TortoiseGit界面化的客戶端工具,讓咱們在使用過程當中更加簡單了,先理解了Git的工做流程和使用方法,再慢慢了解一下命令行,也是不錯的。其實界面化的工具每一步指令的本質仍是命令行。在寫這篇文章的同時,我也參考了不少博客,在此表示感謝。TortoiseGit還有不少功能沒有一一介紹,相信有了本篇的基礎,上手不是難事了。