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

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

Jun 22, 2020 am 09:56 AM
git

分支是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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Go語言中用於浮點數運算的庫有哪些? Go語言中用於浮點數運算的庫有哪些? Apr 02, 2025 pm 02:06 PM

Go語言中用於浮點數運算的庫介紹在Go語言(也稱為Golang)中,進行浮點數的加減乘除運算時,如何確保精度是�...

h5項目怎麼運行 h5項目怎麼運行 Apr 06, 2025 pm 12:21 PM

運行 H5 項目需要以下步驟:安裝 Web 服務器、Node.js、開發工具等必要工具。搭建開發環境,創建項目文件夾、初始化項目、編寫代碼。啟動開發服務器,使用命令行運行命令。在瀏覽器中預覽項目,輸入開發服務器 URL。發布項目,優化代碼、部署項目、設置 Web 服務器配置。

Gitee Pages靜態網站部署失敗:單個文件404錯誤如何排查和解決? Gitee Pages靜態網站部署失敗:單個文件404錯誤如何排查和解決? Apr 04, 2025 pm 11:54 PM

GiteePages靜態網站部署失敗:404錯誤排查與解決在使用Gitee...

Beego ORM中如何指定模型關聯的數據庫? Beego ORM中如何指定模型關聯的數據庫? Apr 02, 2025 pm 03:54 PM

在BeegoORM框架下,如何指定模型關聯的數據庫?許多Beego項目需要同時操作多個數據庫。當使用Beego...

Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Go語言中哪些庫是由大公司開發或知名的開源項目提供的? Apr 02, 2025 pm 04:12 PM

Go語言中哪些庫是大公司開發或知名開源項目?在使用Go語言進行編程時,開發者常常會遇到一些常見的需求,�...

在Go語言中使用Redis Stream實現消息隊列時,如何解決user_id類型轉換問題? 在Go語言中使用Redis Stream實現消息隊列時,如何解決user_id類型轉換問題? Apr 02, 2025 pm 04:54 PM

Go語言中使用RedisStream實現消息隊列時類型轉換問題在使用Go語言與Redis...

H5頁面製作是否需要持續維護 H5頁面製作是否需要持續維護 Apr 05, 2025 pm 11:27 PM

H5頁面需要持續維護,這是因為代碼漏洞、瀏覽器兼容性、性能優化、安全更新和用戶體驗提升等因素。有效維護的方法包括建立完善的測試體系、使用版本控制工具、定期監控頁面性能、收集用戶反饋和製定維護計劃。

使用 sql.Open 時,DSN 傳空為什麼不報錯? 使用 sql.Open 時,DSN 傳空為什麼不報錯? Apr 02, 2025 pm 12:54 PM

使用sql.Open時,DSN傳空為什麼不報錯?在Go語言中,sql.Open...

See all articles