git入門(四)Git分支相關

創建併合並分支

git每次的提交都會把它們串成一條線,這條時間線就是一個分支。master分支這條目前僅有的時間線,叫主分支,HEAD嚴格來說不是指向提交,而是指向master,master纔是指向提交的,所以HEAD指向的就是當前分支。

起初,master分支時一條線,GIt用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點。

每次提交,master分支都會向前一步,隨着不斷的提交,master分支的線會越來越長。

當我們創建新的分支,例如dev,Git新建了一個指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上。

之後,對工作區的修改就是針對dev分支了,比如新提交一次後,dev指針往前移動一步,而master指針不變

 

如果我們的工作完成,就可以合併到master上。直接把master指向dev的當前提交。

合併完分支後,可以刪除dev分支。刪除dev分支就是刪除dev的指針。

 

演練步驟:

 

1.創建dev分支,然後切換到dev分支

git checkout -b dev

git checkout -b表示創建並切換(相當於 git branch dev 和 git checkout dev)

2.用git branch 查看當前分支

git branch

(git branch 命令會列出所有分支,當前分支前面會標有一個*號)

3.修改readme.txt的文件,再進行提交

vi readme.txt

git add readme.txt

git commit -m “branch test”

4.切換回到master分支

git checkout master

這是會發現readme.txt原先的修改不見了

5.再將dev分支的工作合併到master分支上

git merge dev

Updating b32ce9f..e55c3c7

Fast-forward

 readme.txt | 3 ++-

 1 file changed, 2 insertions(+), 1 deletion(-)

 

Fast-forward信息,Git告訴我們,這次合併是“快進模式”,也就是直接把master指向dev的當前提交,所以合併速度非常快。

當然,也不是每次合併都能Fast-forward

6.再刪除dev分支。

git branch -d dev

再次查看分支

$ git branch

* master

解決衝突

1.創建分支

git checkout -b f1

修改readme.txt內容

2.在f1分支上提交

git add readme.txt

git commit -m “modify by f1”

3.切換到master分支

git checkout master

再修改readme.txt內容

再提交git add readme.txt

git commit -m “modify by master”

現在分支圖:

4.試圖合併

git merge f1

Auto-merging readme.txtCONFLICT (content):

Merge conflict in readme.txtAutomatic merge failed;

 fix conflicts and then commit the result.

提示無法合併成功。

5.查看readme.txt內容

Git is a new version control system.

Git is free software under the GPL.

XXXX.

<<<<<<< HEAD

Creating a new branch is quick & simple.

=======

Creating a new branch is quick AND simple.

>>>>>>> f1

修改內容爲:

Git is a new version control system.

Git is free software under the GPL.

XXXX.

Creating a new branch is quick & simple.

6.再次提交

git add readme.txt

git commit -m “confict solved”

7.使用git log --graph查看分支合併情況

git log --graph --pretty=oneline --abbrev-commit

 b7ce8e1 (HEAD -> master) slove conflict

|\

| * e7aec25 from f1 commit

* | 43d00f5 modify from matser

|/

* e55c3c7 branch test

* b32ce9f (origin/master) 4

* a857d16 第三次修改

* 1662df4 test stage

* ed5f4bd append GPL

* 52d72d3 add new

* cf4de49 wrote a readme file

8.刪除分支

git branch -d f1

 

分支管理策略

合併分支,Git會用Fast forward 模式,但這種模式下,刪除分支後,會丟掉分支信息。

如果強制禁用Fast forward模式,Git 就會在merge時生成一個新的commit。這樣,從分支歷史上就可以看出分支信息。

git checkout -b dev

vi readme.txt

git add readme.txt

git commit -m “add merge”

git checkout master

git merge --no-ff -m “merge wih no-ff” dev;

git log --graph --pretty=oneline --abbrev-commit

*   d92224a (HEAD -> master) merge with no-ff

|\

| * a99cec5 (dev) add merge

|/

*   b7ce8e1 slove conflict

|\

| * e7aec25 from f1 commit

* | 43d00f5 modify from matser

|/

* e55c3c7 branch test

* b32ce9f (origin/master) 4

* a857d16 第三次修改

* 1662df4 test stage

* ed5f4bd append GPL

* 52d72d3 add new

* cf4de49 wrote a readme file

Bug分支

當需要及時修改一個101 的bug,但是當前dev分支的工作沒做完,還未提交,這時又想創建一個分支issue-101的分支去修復這個bug

git提供了一個隱藏現場的功能,等恢復現場後繼續工作

git stash

1.首先切換dev分支,git checkout dev

然後修改文件readme.txt

Git is a new version control system.

Git is free software under the GPL.

XXXX.

create a new branch is simple and interest.

new branch dev

the 5 line hsd

git bash

2.git status 查看工作區間

$ git status

On branch master

Your branch is ahead of 'origin/master' by 10 commits.

  (use "git push" to publish your local commits)

 

Changes not staged for commit:

  (use "git add <file>..." to update what will be committed)

  (use "git checkout -- <file>..." to discard changes in working directory)

 

        modified:   readme.txt

 

no changes added to commit (use "git add" and/or "git commit -a")

 

3.git stash 保存工作區間

Saved working directory and index state WIP on master: ff0d4d0 merge bug 101

 

再次使用git status查看On branch master

Your branch is ahead of 'origin/master' by 10 commits.

  (use "git push" to publish your local commits)

 

nothing to commit, working tree clean

 

4.切換到master,然後創建101分支

git checkout -b isues-101

解決bug修改readme.txt

git add readme.txt

git commit -m “fix bug 101”

 

5.合併分支git merge --no-ff -m “merge bug” issue-101

6.刪除分支 git branch -d issue-101

7.切換回dev,然後恢復原先的工作區

git checkout dev  git stash pop

 

如果要丟棄一個沒有被合併的分支,可以通過git branch -D <name>強行刪除

 

多人協作

從遠程倉庫克隆,git會將本地的master分支和遠程分支對應起來

git remote 查看遠程庫信息

git remote -v 查看遠程庫詳細信息

git push origin master 推送master分支的本地提交到遠程庫

從遠程庫抓取分支

創建一個新的目錄例如 g:git002

遠程克隆:

git clone [email protected]:2018xsm/git001

Cloning into 'git001'...

remote: Counting objects: 66, done.

remote: Compressing objects: 100% (36/36), done.

remote: Total 66 (delta 23), reused 66 (delta 23), pack-reused 0

Receiving objects: 100% (66/66), 5.51 KiB | 513.00 KiB/s, done.

Resolving deltas: 100% (23/23), done.

查看分支:

git branch

$ git branch

* master

創建遠程origin 的dev分支到本地

git checkout -b dev origin/dev

提交dev的本地修改並推送到遠程庫的分支

vi dev.txt

 git add env.txt

git commit -m “dev”

git push origin dev

 

再回到原先的git本地庫g:git

修改dev.txt再提交

推送失敗:

git pull 把最新的提交抓取下來,git pull也失敗,沒有指定本地dev分支與遠程origin/dev分支的鏈接,設置dev和origin dev的鏈接

git branch --set-upstream-to=origin/dev dev

再次抓取git pull,修改衝突,提交併推送即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章