13、git分支和打標籤
學習目標:
1、瞭解分支的操作
2、瞭解標籤的操作
學習過程:
一、分支branch
Git和SVN的分支管理差別也是非常大的,SVN的分支管理可以說非常複雜,而且效率也很低,但是Git的分支管理就很簡單,你可以快速的建立要給分支,或者刪除一個分支。
一般每一天工作的開始,應該都是先建立一個分支,然後再這個分支上面開發程式碼,測試沒有問題後就可以把程式碼和平到主分支上面。然後再切換到主分支測試沒有問題。又可以在你的分支上面繼續開發程式碼。
常用的分支命令
檢視目前的所有分支
git branch -a
建立自己的分支
git branch mynew
切換分支
git checkout mynew
合拼分支
先切換到主分支
git check master
在合併
git merge mynew
刪除分支
git branch -D mynew
二、分支合併
這裡再重點講一下分支的合併,一旦某分支有了獨立內容,你終究會希望將它合併回到你的主分支。 你可以使用以下命令將任何分支合併到當前分支中去:
1、基本操作
$ git branch
* master
newtest
$ ls
README test.txt test2.txt
$ git merge newtest
Updating 2e082b7..556f0a0
Fast-forward
test2.txt | 1 -
1 file changed, 1 deletion(-)
delete mode 100644 test2.txt
$ ls
README test.txt
以上例項中我們將 newtest 分支合併到主分支去,test2.txt 檔案被刪除。
2、合併衝突
合併並不僅僅是簡單的檔案新增、移除的操作,Git 也會合並修改。
$ git branch
* master
$ cat test.txt
liubao.com
首先,我們建立一個叫做"change_site"的分支,切換過去,我們將內容改為 www.javadayup.com 。
$ git checkout -b change_site
Switched to a new branch 'change_site'
$ vim test.txt
$ head -1 test.txt
www.javadayup.com
$ git commit -am 'changed the site'
[change_site d7e7346] changed the site
1 file changed, 1 insertion(+), 1 deletion(-)
將修改的內容提交到 "change_site" 分支中。 現在,假如切換回 "master" 分支我們可以看內容恢復到我們修改前的,我們再次修改test.txt檔案。
$ git checkout master
Switched to branch 'master'
$ head -1 test.txt
www.runoob.com
$ vim test.txt
$ cat test.txt
runoob.com
新增加一行
$ git diff
diff --git a/test.txt b/test.txt
index 704cce7..f84c2a4 100644
--- a/test.txt
+++ b/test.txt
@@ -1 +1,2 @@
runoob.com
+新增加一行
$ git commit -am '新增加一行'
[master 14b4dca] 新增加一行
1 file changed, 1 insertion(+)
現在這些改變已經記錄到我的 "master" 分支了。接下來我們將 "change_site" 分支合併過來。
$ git merge change_site
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
$ cat test.txt
<<<<<<< HEAD
liubao.com
新增加一行
=======
www.javadayup.com
>>>>>>> change_site
我們將前一個分支合併到 "master" 分支,一個合併衝突就出現了,接下來我們需要手動去修改它。
$ vim test.txt
$ cat test.txt
www.javadayup.com
新增加一行
$ git diff
diff --cc test.txt
index f84c2a4,bccb7c2..0000000
--- a/test.txt
+++ b/test.txt
@@@ -1,2 -1,1 +1,2 @@@
- runoob.com
+ www.runoob.com
+新增加一行
在 Git 中,我們可以用 git add 要告訴 Git 檔案衝突已經解決
$ git status -s
UU test.txt
$ git add test.txt
$ git status -s
M test.txt
$ git commit
[master 88afe0e] Merge branch 'change_site'
現在我們成功解決了合併中的衝突,並提交了結果。
三、Git 標籤
如果你達到一個重要的階段,並希望永遠記住那個特別的提交快照,你可以使用 git tag 給它打上標籤。比如說,我們想為我們的專案釋出一個"1.0"版本。 我們可以用 git tag -a v1.0 命令給最新一次提交打上(HEAD)"v1.0"的標籤。-a 選項意為"建立一個帶註解的標籤"。 不用 -a 選項也可以執行的,但它不會記錄這標籤是啥時候打的,誰打的,也不會讓你添加個標籤的註解。 我推薦一直建立帶註解的標籤。
$ git tag -a v1.0
當你執行 git tag -a 命令時,Git 會開啟你的編輯器,讓你寫一句標籤註解,就像你給提交寫註解一樣。
指定標籤資訊命令:
git tag -a <tagname> -m "說明文字"
PGP簽名標籤命令:
git tag -s <tagname> -m "說明文字"
現在,注意當我們執行 git log --decorate 時,我們可以看到我們的標籤了:
$ git log --oneline --decorate --graph
* 88wedde (HEAD, tag: v1.0, master) Merge branch 'change_site'
如果我們要檢視所有標籤可以使用以下命令:
$ git tag
v0.9
v1.0