圖解Git分支和命令

大家好,我是若川。持續組織了近一年的源碼共讀活動,感興趣的可以?點此加我微信ruochuan12?參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》?包含20余篇源碼文章。歷史面試系列。另外:目前建有江西|湖南|湖北籍前端群,可加我微信進群。

關于命令行工具,強烈推薦我之前的文章》》》使用 ohmyzsh 打造 windows、ubuntu、mac 系統高效終端命令行工具。用過的都說非常好用。


Git的殺手锏是帶來了輕量級分支,如果你使用svn分支,就會被Git新建分支和切換分支時的速度所震驚。

操作分支在Git中非常高頻,學好分支操作是學好Git的基礎,但在實際工作中,我發現很多同學并不熟悉Git的分支操作,本文試圖通過圖解的方式,講解常用分支操作命令,和命令背后的Git分支模型。

主分支

在Git中新建一個項目后,默認有一個分支,即主分支。主分支一般表示項目的穩定版本,主分支應該包含穩定沒有 Bug 的代碼,并保持隨時可以發布的狀態,對于小型項目來說,只有一個主分支就夠用了,每次我們提交都會創建一個commit節點。

$ git commit -m "c1"$ git commit -m "c2"$ git commit -m "c3"

上面的命令會創建三個commit節點,此時master分支如下圖所示:

af8b5063c6a55d5b5213bacf108bc230.png

主分支上應該只包合并提交,所有的迭代應該都在分支上進行,如果是簡單的改動,直接在主分支修改也是可以的,如果功能較復雜,且需要多次提交,不建議在主分支直接修改。

功能分支

當有新的功能要開發時,應該新建一個功能分支,命令如下:

$ git checkout -b feature/a

接下來在分支上創建兩個提交,命令如下:

$ git commit -m "c4"$ git commit -m "c5"

此時提交樹如下圖所示:

2509b84884911155d23e682f94167499.png

當功能分支開發完成后,需要合并回主分支,合并回主分支有兩種選擇,快速合并和非快速合并,二者的區別在于是否創建提交節點,命令如下:

$ git merge feature/a # 快速合并
$ git merge --no-ff feature/a # 非快速合并

快速合并的結果,會直接將 master 指向了 feature/a,如下圖所示:

89f2dd9293ff632ca7f922ba7a9ce374.png

非快速合并的結果,會在 master 創建合并提交節點,如下圖所示:

3031618047709633043815e9d03a1747.png

兩種合并方式都可以,如果選擇快速合并,需要保證每個提交都是獨立且完整的,如果不滿足要求,Git 支持修改提交歷史,需要修改后再次合并。

修改歷史可以使用 rebase 命令,下面的命令可以修改最近三個提交,將第二個提交的 pick 改為 squash,可以合并第一個和第二個提交,將第三個提交的 pick 改為 edit,可以修改第三個提交的提交信息。

$ git rebase -i HEAD~3pick d24b753 feat: update ci
squash f56ef2f feat: up ci
edit 6c91961 feat: up# Rebase 50ece5c..6c91961 onto 50ece5c (3 commands)
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit

在創建當前分支之后,主分支可能又有新的提交,如下圖所示:

615b72e418d14539c23d8d870057d737.png

在合并之前,建議先將主分支新的提交合并到當前分支,有兩種策略可以選擇,合并和變基,合并操作更簡單,變基操作提交樹更清晰,建議使用變基的方式。

先來看下合并操作的過程,命令如下:

$ git merge master
$ git checkout master
$ git merge feature/a

合并操作后的提交樹如下圖所示:

fb7911e5ebf96b09c9f256e13ff952e8.png

變基會修改feature/a的歷史,就像 feature/a 是在 master 之后開發的一樣,變基命令如下:

$ git rebase master
$ git checkout master
$ git merge feature/a

變基操作后的提交樹如下圖所示,虛線的提交是feature/a變基之前的狀態,在變基后,虛線的提交不再有分支指向,但并不會刪除,而是變成Git中的游離節點,在Git執行GC(垃圾清理)操作后,節點才會徹底刪除。

4d42a8172d33b5c15e7fe552a7289730.png

故障分支

如果發現存在 Bug,要盡快修復,此時可以基于主分支新建故障分支,命令如下:

$ git checkout -b bugfix/b

當驗證沒問題后,故障分支需要合并回主分支,并在主分支上發布新的補丁版本,命令如下:

$ git checkout master
$ git merge --no-ff bugfix/b# 測試 構建 打標簽 發布到npm

主分支更新后,下游的公共分支要及時同步變更,建議使用變基進行同步,命令如下:

$ git checkout feature/a
$ git rebase master

故障分支模型如下圖所示,bugfix/b 分支合并到 master 后,feature/a 分支進行了變基操作。

7e564edee78476a4b6ec176b96d7ec39.png

標簽與歷史

每次發布新版本時都要打標簽,版本號需要符合第四章介紹的語義化版本規范,一般功能分支發布次版本號,故障分支發布修訂版本號,使用Git添加tag的命令如下所示:

# 假設當前版本是 1.1.0
$ git tag 1.1.1 # 修改次版本號
$ git tag 1.2.0 # 修改主版本

Git 的版本號,還可以添加 v 前綴,兩種風格都可以,建議在一個項目里面保持統一,添加v前綴的版本示例如下:

# 假設當前版本是 v1.1.0
$ git tag v1.1.1 *# 修改次版本號
$ git tag v1.2.0 *# 修改主版本號

添加標簽后,提交樹示例如下圖所示。

e626c84fcb2a5ec1c939425d44a8ce47.png

現在假設最新版本是 v1.2.0 了,突然用戶反饋了 v1.0.0 版本存在 bug,如果是比較小的問題,一般我們會建議用戶升級到最新版本 ,但如果用戶不能升級怎么辦,比如 1.x 到 2.x 存在大版本變化。

出于各種原因,存在需要維護歷史版本的需求,對于還有用戶使用需求的歷史版本,需要提供 bug 修復的支持。

此時創建的標簽就起作用了,可以基于標簽新建一個版本分支,并在版本分支上修復 bug,且發布新的版本,歷史版本分支,不需要再次合并回主干分支,創建標簽分支的示例如下:

$ git checkout -b v1.0.x v1.0.0

此時歷史分支的示例如下圖所示。

3a466f546b78a2cd8f5d606355b22d12.png

總結

本文介紹了Git常見的分支命令和分支模型,希望能夠幫助大家更好的掌握Git原理,如果你覺得本文對你有幫助,那就點贊加關注作者吧,如果對本文有任何疑問,歡迎在評論區交流。


46fa63994db7d32033b8c34e8d4c5109.gif

·················?若川簡介?·················

你好,我是若川,畢業于江西高校。現在是一名前端開發“工程師”。寫有《學習源碼整體架構系列》20余篇,在知乎、掘金收獲超百萬閱讀。
從2014年起,每年都會寫一篇年度總結,已經堅持寫了8年,點擊查看年度總結。
同時,最近組織了源碼共讀活動,幫助4000+前端人學會看源碼。公眾號愿景:幫助5年內前端人走向前列。

4aa3a030510fb27fa4f1791fe45ff023.jpeg

掃碼加我微信 ruochuan12、拉你進源碼共讀

今日話題

目前建有江西|湖南|湖北?籍 前端群,想進群的可以加我微信 ruochuan12?進群。分享、收藏、點贊、在看我的文章就是對我最大的支持

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/274599.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/274599.shtml
英文地址,請注明出處:http://en.pswp.cn/news/274599.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vsco_VSCO重新設計:更直觀,更簡化的界面

vscoAmong the many photo-editing apps, VSCO has definitely become a popular favorite among both experienced photographers as well as “aesthetic” Instagram users. However, my interaction with the app starts and ends with using a few key filters and (maybe…

不同長度數據項的排序

注&#xff1a;本文改編自windmissing博客&#xff0c;感謝作者整理&#xff01; 題目&#xff1a; a)給定一個整數數組&#xff0c;其中不同的整數中包含的數字個數可能不同&#xff0c;但是該數組中&#xff0c;所有整數中總的數字數為n。說明如何在O(n)時間內對該數組進行排…

淺談前端埋點監控

大家好&#xff0c;我是若川。持續組織了近一年的源碼共讀活動&#xff0c;感興趣的可以 加我微信lxchuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列。另外&…

css版式_第2部分:使版式具有響應能力,并為以后的版本奠定基礎

css版式The feedback I’ve received over the past week has been amazing, and matches my own excitement about this project. I’ve spent a lot of time researching, writing, and teaching about creating better typography for reading on digital devices over the …

BBS項目--登錄

BBS階段性測試總要求 django登錄報錯 Error: [WinError 10013] 以一種訪問權限不允許的方式做了一個訪問套接字的嘗試。 原因分析&#xff1a;出現這種情況在Windows中很常見&#xff0c;就是端口被占用 解決措施&#xff1a;這時我們只需改一下端口便可以了 登錄前端頁面(HTML…

【聲明】

我的公眾號和朋友圈有時會有一些課程推廣廣告&#xff0c;微博的收入來源。我接的廣告一般來說都是比自己去買會優惠不少&#xff0c;我也會想方設法爭取到更多福利&#xff08;優惠&#xff09;。買過的都知道確實優惠。如果有人看到覺得不合適&#xff0c;不想看到&#xff0…

Win7 訪問共享時輸入正確密碼仍然提示密碼錯誤

1、直接按下winr鍵&#xff0c;輸入secpol.msc&#xff0c;打開本地安全策略。 2、找到“安全設置”的“本地策略”的“安全選項” 3、在右邊一欄找到“網絡安全&#xff1a;LAN管理器身份驗證級別”&#xff0c;雙擊進入 4、在默認狀態選項下&#xff0c;英文版應該為"no…

怎么實現頁面友好跳轉_如何實現軟,友好和一致的UI設計

怎么實現頁面友好跳轉重點 (Top highlight)Design trends are constantly changing, aren’t they? Each month there is a new visual effect or a trick that becomes “設計趨勢在不斷變化&#xff0c;不是嗎&#xff1f; 每個月都有一個新的視覺效果或技巧&#xff0c;成為…

前端趨勢 2022

大家好&#xff0c;我是若川。持續組織了近一年的源碼共讀活動&#xff0c;感興趣的可以 加我微信lxchuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列。另外&…

MySQL Connector/ODBC 5.2.2 發布

MySQL Connector/ODBC 5.2.2 發布&#xff0c;這是一個穩定版本&#xff0c;下載地址&#xff1a; http://dev.mysql.com/downloads/connector/odbc/5.2.html MySQL Connector/ODBC 是 MySQL 官方發布的 ODBC 驅動程序包。轉載于:https://www.cnblogs.com/shihao/archive/2012/…

優秀測試管理工具必備九大功能分析

摘要&#xff1a;測試管理工具對測試的重要性毋庸質疑&#xff0c;兩位筆者有著多年的測試實戰經驗&#xff0c;對市面上的一些測試管理工具有過一定的研究&#xff0c;還根據目前比較流行的敏捷開發過程設計了一款測試管理工具。 這篇文章算是對這個設計過程的總結與分享&…

lightroom預設使用_在Lightroom中使用全景圖增強照片游戲

lightroom預設使用Everyone here has taken a panorama with an iphone. We’ve spun around in a circle, trying to keep that arrow right on the line, and more than likely ended up with a strange, squiggly, horizontal photo. Every so often you might get lucky an…

第91次TC39會議舉行,這還是我認識的JS嗎?

大家好&#xff0c;我是若川。持續組織了近一年的源碼共讀活動&#xff0c;感興趣的可以 加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列。另外…

android調節音量——AudioManager的應用

Android中可以通過程序獲取系統手機的鈴聲和音量。同樣&#xff0c;也可以設置鈴聲和音量。Android中給出了AudioManager類來實現音量獲取、音量控制。本篇基于 Android API 中的 AudioManager 作講述&#xff0c;最后給出實例。下面是本篇大綱&#xff1a;1、認識 AudioManage…

靜態創意和動態創意_再次發揮創意需要什么?

靜態創意和動態創意重點 (Top highlight)According to Oxford dictionary, creativity means “1. Inventiveness. 2. the use of imagination or original ideas to create something.”根據牛津詞典&#xff0c;創造力意味著“ 1。 創造力。 2.利用想象力或獨創性的思想來創造…

oracle 存儲過程 stored procedure 查詢一條記錄或多條記錄

創建基本表 -- Create table create table USER_INFORMATION ( P_ID NUMBER, USER_LOGIN_NAME NVARCHAR2(30) ) 創建包: create or replace package pack_test is type cur_test is ref cursor; end pack_test; / --這個不能少呀&#xff0c;加上這個就可以在…

我寫了 ahooks 源碼分析系列,收到官方邀請我一起維護,這是一次提 PR 的記錄...

大家好&#xff0c;我是若川。持續組織了近一年的源碼共讀活動&#xff0c;感興趣的可以 加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列。另外…

Hdu 4415 Assassin's Creed 【貪心】.cpp

題意&#xff1a; 某A有一個劍 堅韌度為m 他可以用這個劍去攻打別的隊伍 殺掉第 i 個隊伍需要消耗的堅韌度為 Ai 并可以用得到的劍去打別的隊(Bi個) 但是打完別的隊這個劍就不能用了 問怎么用最少的堅韌度擊敗最多的隊伍 給出T組樣例 每個樣例給出n m n表示有n個隊 接下來n行給…

ahooks 整體架構篇,大家都能看得懂

大家好&#xff0c;我是若川。持續組織了近一年的源碼共讀活動&#xff0c;感興趣的可以 加我微信 ruochuan12 參與&#xff0c;每周大家一起學習200行左右的源碼&#xff0c;共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。歷史面試系列。另外…

gif動態圖gif出處_我喜歡GIF的怪異事物

gif動態圖gif出處I was recently reminded that I never wrote down all the weird things I learned about the GIF file format when implementing GIF decoding/playback at work last year. (I was reminded of this because I wrote a line in a corporate blog post draf…