首頁 >開發工具 >Git >版本控制工具Git-分支管理

版本控制工具Git-分支管理

齐天大圣
齐天大圣原創
2020-06-22 09:56:592959瀏覽

分支是Git的一個殺手級應用,和其他版本控制工具不一樣的是,git創建及切換分支的效率極為有效率。

分支簡介

何為分支呢?我們從一個我們非常熟悉的場景來講述,一個已經上線的產品,現在需要新增一個功能。這時候,如果我們在原分支上繼續開發的話,就很不方便,因為是一個已經上線的應用了,肯定需要先測試完畢後才能夠上線。一般我們的做法是,建立一個新的分支,在這個新的分支上開發新的功能,測試完畢後,再合併到主分支上。

分支的建立、切換

目前我的版本庫分支情況如下:

版本控制工具Git-分支管理

建立分支

現在我們建立一個新的分支,dev。建立分支的及檢視分支指令如下:

git branch 分支名
git branch

# git branch dev
# git branch
  dev
* master

#切換分支

分支已經建立成功了。現在我們來切換到新的分支,切換分支的命令如下git checkout 分支名

# git checkout dev
Switched to branch 'dev'

版本控制工具Git-分支管理

#現在,我們在新的分支做一些修改,然後提交,然後切換到master分支做點修改提交。然後,我們來看看分支的狀態。

git vim config.php # 修改config.php文件
git add . && git commit -m 'add config.php'

git checkout master # 切换到主分支
git vim config.php
git add . && git commit -m 'change config.php'

版本控制工具Git-分支管理

$ git log --oneline --decorate --graph --all
* ca4589c (HEAD -> master) add config file
| * 43a5a8f (dev) add config.php
|/
* 19e3186 add index.php
* 9cc82f9 first commit

一條指令完成分支的建立與切換分支

git checkout -b 新分支名

分支的合併

首先引入一個場景,該場景非常的常見:

  • 一個系統已經上線

  • 該系統需要更新一個新的功能,所以你新建了一個分支(dev)並在此分支上開展工作。

  • 此時,系統突然出現的一個問題,需要緊急排查處理。

  • 那麼,這時候你需要先切換到線上版本(master),然後新建立一個分支(fixbug),在新的分支上修正錯誤

  • 完成測試後,切換到線上分支,然後來合併fixbug分支,再將改變推到線上的分支。

  • 最後,我們就可以切換到dev分支來繼續運作了。

目前,我們版本庫狀態如下:

版本控制工具Git-分支管理

#現在,需要新新分支,在新分支上新增新的功能。

git checkout -b dev

然後在新的分支上做一些修改。

版本控制工具Git-分支管理

此時,發現線上出現了一個嚴重的bug,需要緊急處理。那麼,首先我需要切換到master分支。但在切換的時候發生了一個錯誤

$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
        login.php
Please commit your changes or stash them before you switch branches.
Aborting

以上錯誤我們常常會碰到,這是因為在合併分支的時候,工作區和暫存區必須是「乾淨」的。有兩種方法可以達到上述要求

  • 提交修改

  • #暫存

##我們這裡使用暫存的方法來示範

$ git stash
$ git checkout master
Switched to branch 'master'

当你切换分支的时候,Git 会重置你的工作目录,使其看起来像回到了你在那个分支上最后一次提交的样子。

现在,我们新建fixbug分支,在这个分支上修复bug。

$ git checkout -b fixbug

合并分支

修复完成且测试通过时,就可以把它合并到master上了。合并使用git  merge 分支名

$ git checkout master Switched to branch 'master' 
$ git merge fixbug

删除分支

这个时候,fixbug功能已经完成了,可以将它给删除掉了。

$ git branch -d fixbug 
Deleted branch fixbug (was cca73bb).

现在,我们可以继续在dev分支上工作了。我们需要把之前暂存的内容取出来。

$ git checkout dev

$ git stash pop
On branch dev
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:   login.php

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (2f8476defbaa813e31f3e1b081f5b88416b2ff50)

新功能完成后,提交到版本库。

版本控制工具Git-分支管理

冲突解决

现在我们新的功能完成了,那么就可以把它合并到master分支上了。现在我们来演示合并时遇到冲突时,如何去解决。

$ git checkout master
Switched to branch &#39;master&#39;

$ git merge dev
Auto-merging index.php
CONFLICT (content): Merge conflict in index.php
Automatic merge failed; fix conflicts and then commit the result.

提示我index.php合并的时候有冲突,我们来看看该文件

$ cat index.php
<?php

<<<<<<< HEAD
echo &#39;hello world&#39;;
=======
echo &#39;version 1.1 finished&#39;;
>>>>>>> dev
<br/>
$ cat index.php 
<?php 
echo &#39;version 1.1 finished&#39;;

然后再add并提交,最后在提交

$ git commit -m &#39;merge dev&#39;

这个时候就合并成功了,现在就去删除dev分支吧。

$ git branch -d dev

以上是版本控制工具Git-分支管理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn