網(wǎng)站首頁 編程語言 正文
1.新建一個分支并且使分支指向指定的提交對象
使用命令:git branch branchname commitHash
。
我們現(xiàn)在本地庫中只有一個?master
?分支,并且在?master
?分支有三個提交歷史。
需求:創(chuàng)建一個?testing
?分支,并且testing
?分支指向?master
?分支第二個版本。
# 1.查看提交歷史記錄 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git log --graph --oneline * b97ccfd (HEAD -> master) 第3次提交,新增內(nèi)容:branch test v3 * f72a9fe 第2次提交,新增內(nèi)容:branch test v2 * fa2439a 第1次提交,新增readme.txt文件 # 2.創(chuàng)建testing分支 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git branch testing f72a9fe # 3.查看提交歷史記錄,此時我們還在master分支上 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git log --graph --oneline * b97ccfd (HEAD -> master) 第3次提交,新增內(nèi)容:branch test v3 * f72a9fe (testing) 第2次提交,新增內(nèi)容:branch test v2 * fa2439a 第1次提交,新增readme.txt文件 # 4.切換到testing分支 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git checkout testing Switched to branch 'testing' L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ git log --graph --oneline * f72a9fe (HEAD -> testing) 第2次提交,新增內(nèi)容:branch test v2 * fa2439a 第1次提交,新增readme.txt文件 # 5.再來查看readme.txt文件內(nèi)容 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ cat readme.txt branch test v1 branch test v2
如上,我們看到新創(chuàng)建的?testing
?分支,創(chuàng)建在master
分支的第二個版本上了。
HEAD
?指針的移動狀態(tài)如下圖:
執(zhí)行git branch testing f72a9fe
命令,創(chuàng)建testing
?分支后:
執(zhí)行git checkout testing
命令,切換分之后:
總結(jié):
在日常工作中,我們可以這樣的操作,切換到之前的版本,或者其他人之前寫過的版本。我們把自習(xí)需要的代碼進(jìn)行保存,然后就可以在切換到自己開發(fā)的分支上,應(yīng)用這些代碼,同時把剛才創(chuàng)建的分支刪除掉即可。
(該操作在工作中非常的實(shí)用)
2.思考
git checkout -b branchname commit-Hash
命令,
能否代替下面兩個命令:
git branch branchname commitHash
git checkout branchname
答案是可以的。
示例如下:
# 1.查看本地庫中所有的分支 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git branch * master # 2.查看當(dāng)前分支的提交歷史 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git log --oneline b97ccfd (HEAD -> master) 第3次提交,新增內(nèi)容:branch test v3 f72a9fe 第2次提交,新增內(nèi)容:branch test v2 fa2439a 第1次提交,新增readme.txt文件 # 3.創(chuàng)建testing分支,并切換 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git checkout -b testing f72a9fe Switched to a new branch 'testing' # 4.查看testing分支的提交歷史 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ git log --oneline f72a9fe (HEAD -> testing) 第2次提交,新增內(nèi)容:branch test v2 fa2439a 第1次提交,新增readme.txt文件 # 5.查看readme.txt是否是V2版本 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ cat readme.txt branch test v1 branch test v2
3.項(xiàng)目分叉歷史的形成
查看當(dāng)前版本庫的如上,此刻正在?testing
?分支的上工作,在?readme.txt
?文件在第二個版本。
需求:我需要在?testing
?分支的上,修改?readme.txt
?文件,并提交新版本。
# 1.查看版本庫狀態(tài) # 分支情況 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ git branch master * testing # 分支的提交歷史 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ git log --oneline f72a9fe (HEAD -> testing) 第2次提交,新增內(nèi)容:branch test v2 fa2439a 第1次提交,新增readme.txt文件 # 2.修改readme.txt文件并提交 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ echo "branch test v333 testing" >> readme.txt L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ git commit -a -m 'testing 分支的提交' warning: LF will be replaced by CRLF in readme.txt. The file will have its original line endings in your working directory [testing 7ba443e] testing 分支的提交 1 file changed, 1 insertion(+) # 3.查看testing分支歷史提交 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ git log --oneline --graph * 7ba443e (HEAD -> testing) testing 分支的提交 * f72a9fe 第2次提交,新增內(nèi)容:branch test v2 * fa2439a 第1次提交,新增readme.txt文件 # 4.查看所有分支的歷史提交 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ git log --oneline --graph --all * 7ba443e (HEAD -> testing) testing 分支的提交 | * b97ccfd (master) 第3次提交,新增內(nèi)容:branch test v3 |/ * f72a9fe 第2次提交,新增內(nèi)容:branch test v2 * fa2439a 第1次提交,新增readme.txt文件
我們可以看到,現(xiàn)在這個項(xiàng)目的提交歷史已經(jīng)產(chǎn)生了分叉。
在實(shí)際工作中,是因?yàn)槟銊?chuàng)建了一個新分支,并切換過去進(jìn)行了一些工作,可能隨后又切換回 master 分支進(jìn)行了另外一些工作,這樣針對的是不同分支進(jìn)行改動,就會在工作目錄中產(chǎn)生項(xiàng)目的分叉歷史。
你可以在不同分支間不斷地來回切換和工作,并在時機(jī)成熟時將它們合并起來。 而所有這些工作,你需要的命令只有?branch
、checkout
?和?commit
。
此時?HEAD
?指針的狀態(tài)如下圖:
4.分支的總結(jié)
由于 Git 的分支實(shí)質(zhì)上僅是包含,所指對象校驗(yàn)和(長度為 40 的 SHA-1 值字符串)的文件,所以它的創(chuàng)建和銷毀都異常高效。 創(chuàng)建一個新分支就相當(dāng)于往一個文件中寫入 41 個字節(jié)(40 個字符和 1 個換行符),如此的簡單能不快嗎。
這里簡單說明一下:
# 1.查看.git/refs/heads目錄 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ ll .git/refs/heads/ total 2 -rw-r--r-- 1 L 197121 41 4月 16 22:07 master -rw-r--r-- 1 L 197121 41 4月 17 11:26 testing # 可以看到.git/refs/heads目錄存放的是版本庫中的分支。 # 2.查看testing文件只呢個中的內(nèi)容給 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ cat .git/refs/heads/testing 7ba443e4f6591631af4276bd3aa7356ff0f61fac # 可以看到是一個提交的索引,對比上圖中的`7ba443e`提交,你就明白了。 # 3.在往深說一點(diǎn),查看.git/HEAD文件 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ cat .git/HEAD ref: refs/heads/testing # .git/HEAD文件就是之前說的HEAD指針,指向了當(dāng)前正在工作的分支。 # 是不是一切都非常的簡單高效。
這與過去大多數(shù)版本控制系統(tǒng)形成了鮮明的對比,它們在創(chuàng)建分支時,將所有的項(xiàng)目文件都復(fù)制一遍,并保存到一個特定的目錄。 完成這樣繁瑣的過程通常需要好幾秒鐘,有時甚至需要好幾分鐘。所需時間的長短,完全取決于項(xiàng)目的規(guī)模。
而在 Git 中,任何規(guī)模的項(xiàng)目都能在瞬間創(chuàng)建新分支。 同時,由于每次提交都會記錄父對象,所以尋找恰當(dāng)?shù)暮喜⒒A(chǔ)(即共同祖先)也是同樣的簡單和高效。 這些高效的特性使得 Git 鼓勵開發(fā)人員頻繁地創(chuàng)建和使用分支。
原文鏈接:https://www.cnblogs.com/liuyuelinfighting/p/16824082.html
相關(guān)推薦
- 2022-05-27 C++實(shí)現(xiàn)數(shù)獨(dú)快速求解_C 語言
- 2022-09-30 QT設(shè)計(jì)秒表功能(跑步計(jì)時器)_C 語言
- 2022-07-29 cypress測試本地web應(yīng)用_web2.0
- 2022-10-27 React的createElement和render手寫實(shí)現(xiàn)示例_React
- 2022-07-09 使用python獲取cpu每秒的使用率_python
- 2022-04-12 解決error: failed to push some refs to ‘xxx(遠(yuǎn)程倉庫)‘
- 2023-01-10 redis中Could?not?get?a?resource?from?the?pool異常及解決方
- 2022-03-16 VS2022?安裝.NET4.5目標(biāo)包的方法_實(shí)用技巧
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支