Git教程4——Git標籤管理
阿新 • • 發佈:2019-02-07
在test.txt新增一行內容“888888”,然後提交,如下所示:
現在切換到master分支上,也在test.txt最後一行新增內容,內容為"999999",如下所示:
Git還會自動提示我們當前
現在,
Git告訴我們,test.txt檔案存在衝突,必須手動解決衝突後再提交。
可以直接檢視readme.txt的內容:
Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,其中<<<HEAD是指主分支修改的內容,>>>>>dev1 是指dev1上修改的內容,開啟test.txt檔案,修改下如下後儲存:
現在已經是我們想要的效果了,提交:
用帶引數的
最後,刪除
分支管理
修改test.txt檔案,並提交一個新的commit:
現在切換回
合併後,我們用git log看看分支歷史:
注意master分支前的*字元:它代表現在檢出的那一個分支(也就是說,當前HEAD指標所指向的分支)。 這意味著如果在這時候提交,master分支將會隨著新的工作向前移動。 如果需要檢視每一個分支的最後一次提交,可以執行git branch -v命令:
--merged與--no-merged這兩個有用的選項可以過濾這個列表中已經合併或尚未合併到當前分支的分支。 如果要檢視哪些分支已經合併到當前分支,可以執行git branch --merged:
現在,用git status檢視工作區,就是乾淨的(除非有沒有被Git管理的檔案),因此可以放心地建立分支來修復bug。首先確定要在哪個分支上修復bug,假定需要在master分支上修復,就從master建立臨時分支issue-404,現在修復bug,然後提交:
修復完成後,切換到master分支,並完成合並,最後刪除issue-404分支:
現在,我們可以回到dev分支上了
工作區是乾淨的,那麼我們工作現場去哪裡呢?我們可以使用命令 git stash list來檢視下:
現在再用git stash list檢視,就看不到任何stash內容了 多人協作
上面顯示了可以抓取和推送的
推送分支 就是把該分支上的所有本地提交推送到遠端庫。推送時,要指定本地分支,使用命令git push origin master,這樣,Git就會把該分支推送到遠端庫對應的遠端分支上,如果要推送其他分支,比如
多人協作時,大家都會往master分支上推送各自的修改。 首先我的mygit目錄的dev分支也要推送到遠端去,如下:
現在我們可以模擬另外一個同事,可以在另一臺電腦上(注意要把SSH key新增到github上)或者同一臺電腦上另外一個目錄克隆,新建一個目錄名字叫mygit2,克隆遠端的庫到本地來
現在目錄下生成如下所示:
當你的小夥伴從遠端庫clone時,預設情況下,你的小夥伴只能看到本地的
現在我們的小夥伴要在dev分支上做開發,就必須把遠端的origin的dev分支克隆到本地來,於是可以使用命令建立本地dev分支:git checkout –b dev origin/dev
現在切換到master分支上,也在test.txt最後一行新增內容,內容為"999999",如下所示:
Git還會自動提示我們當前
master
分支比遠端的master
分支要超前1個提交,在master上提交:現在,
master
分支和dev1
分支各自都分別有新的提交。這種情況下,Git無法執行“快速合併”,只能試圖把各自的修改合併起來,但這種合併就可能會有衝突:Git告訴我們,test.txt檔案存在衝突,必須手動解決衝突後再提交。
git status
也可以告訴我們衝突的檔案:可以直接檢視readme.txt的內容:
Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,其中<<<HEAD是指主分支修改的內容,>>>>>dev1 是指dev1上修改的內容,開啟test.txt檔案,修改下如下後儲存:
現在已經是我們想要的效果了,提交:
用帶引數的
git log
也可以看到分支的合併情況:最後,刪除
dev1
分支:分支管理
通常合併分支時,Git會用“Fast forward”
模式,但這種模式下,刪除分支會丟掉分支資訊。如果強制禁用“Fast
forward"
模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支資訊。現在我們來使用帶引數 –no-ff來禁用”Fast forward”模式。
首先,仍然建立並切換dev
分支:
修改test.txt檔案,並提交一個新的commit:
現在切換回
master,合併dev
分支,使用“--no-ff”
引數。因為本次合併要建立一個新的commit,所以加上-m
引數,把commit描述寫進去。
合併後,我們用git log看看分支歷史:
分支策略:首先master主分支應該是非常穩定的,也就是用來發布新版本,一般情況下不允許在上面幹活,幹活一般情況下在新建的dev分支上幹活,也就是說,dev
分支是不穩定的,到某個時候,比如1.0版本釋出時,再把dev
分支合併到master
上,在master
上釋出1.0版本。你和你的小夥伴們每個人都在dev
分支上幹活,每個人都有自己的分支,時不時地往dev
分支上合併就可以了。
現在已經建立、合併、刪除了一些分支,讓我們看看一些常用的分支管理工具。
git branch
命令不只是可以建立與刪除分支。 如果不加任何引數執行它,會得到當前所有分支的一個列表:
注意master分支前的*字元:它代表現在檢出的那一個分支(也就是說,當前HEAD指標所指向的分支)。 這意味著如果在這時候提交,master分支將會隨著新的工作向前移動。 如果需要檢視每一個分支的最後一次提交,可以執行git branch -v命令:
--merged與--no-merged這兩個有用的選項可以過濾這個列表中已經合併或尚未合併到當前分支的分支。 如果要檢視哪些分支已經合併到當前分支,可以執行git branch --merged:
因為之前已經合併了dev分支,所以現在看到它在列表中。 在這個列表中分支名字前沒有*號的分支通常可以使用git branch -d刪除掉——你已經將它們的工作整合到了另一個分支,所以並不會失去任何東西。
檢視所有包含未合併工作的分支,可以執行git branch --no-merged命令。
Bug分支
開發過程中,遇到bug是難免的,有了bug就需要修復,在Git中,分支是很強大的,每個bug都可以通過一個臨時分支來修復,修復完成後,合併分支,然後將臨時的分支刪除掉。假設我在開發中接到一個404
bug,我們可以建立一個404分支來修復它,但是,當前的dev分支上的工作還沒有提交。不是我不想提交,而是工作沒有完成,我們還無法提交,怎麼辦呢?還好,Git還提供了一個stash功能,可以把當前工作現場 ”隱藏起來”,等以後恢復現場後繼續工作
現在,用git status檢視工作區,就是乾淨的(除非有沒有被Git管理的檔案),因此可以放心地建立分支來修復bug。首先確定要在哪個分支上修復bug,假定需要在master分支上修復,就從master建立臨時分支issue-404,現在修復bug,然後提交:
修復完成後,切換到master分支,並完成合並,最後刪除issue-404分支:
現在,我們可以回到dev分支上了
工作區是乾淨的,那麼我們工作現場去哪裡呢?我們可以使用命令 git stash list來檢視下:
工作現場還在,Git把stash內容存在某個地方了,但是需要恢復一下,可以使用如下2個方法:
1. git stash apply恢復,恢復後,stash內容並不刪除,你需要使用命令git stash drop來刪除。 2. 另一種方式是使用git stash pop,恢復的同時把stash內容也刪除了。現在再用git stash list檢視,就看不到任何stash內容了 多人協作
當你從遠端倉庫克隆時,實際上Git自動把本地的master
分支和遠端的master
分支對應起來了,並且,遠端倉庫的預設名稱是origin
。
上面顯示了可以抓取和推送的
origin
的地址。如果沒有推送許可權,就看不到push的地址。推送分支 就是把該分支上的所有本地提交推送到遠端庫。推送時,要指定本地分支,使用命令git push origin master,這樣,Git就會把該分支推送到遠端庫對應的遠端分支上,如果要推送其他分支,比如
dev
,就改成git
push origin dev
但並不是一定要把本地分支往遠端推送,那麼,哪些分支需要推送,哪些不需要呢?
-
master
分支是主分支,因此要時刻與遠端同步; -
dev
分支是開發分支,團隊所有成員都需要在上面工作,所以也需要與遠端同步; -
bug分支只用於在本地修復bug,就沒必要推到遠端了,除非老闆要看看你每週到底修復了幾個bug;
多人協作時,大家都會往master分支上推送各自的修改。 首先我的mygit目錄的dev分支也要推送到遠端去,如下:
現在我們可以模擬另外一個同事,可以在另一臺電腦上(注意要把SSH key新增到github上)或者同一臺電腦上另外一個目錄克隆,新建一個目錄名字叫mygit2,克隆遠端的庫到本地來
現在目錄下生成如下所示:
當你的小夥伴從遠端庫clone時,預設情況下,你的小夥伴只能看到本地的
master
分支現在我們的小夥伴要在dev分支上做開發,就必須把遠端的origin的dev分支克隆到本地來,於是可以使用命令建立本地dev分支:git checkout –b dev origin/dev