1. 程式人生 > >13、git分支和打標籤

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