網站首頁 編程語言 正文
1、創建分支
(1)創建分支
Git 是怎么創建新分支的呢?
很簡單,就是要創建一個可以移動的新的指針。
比如,創建一個testing
分支, 你需要使用命令:git branch testing
。
示例:
# 1.查看本地版本庫歷史提交 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git log --oneline b97ccfd (HEAD -> master) 第3次提交,新增內容:branch test v3 f72a9fe 第2次提交,新增內容:branch test v2 fa2439a 第1次提交,新增readme.txt文件 # 2.新建分支testing L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git branch testing # 3.再次查看本地版本庫歷史提交 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git log --oneline b97ccfd (HEAD -> master, testing) 第3次提交,新增內容:branch test v3 f72a9fe 第2次提交,新增內容:branch test v2 fa2439a 第1次提交,新增readme.txt文件
可以看到(HEAD -> master, testing)
,說明本地版本庫中,已經多了一個testing
分支。
(2)圖示理解
如上操作,會在當前所在的提交對象上創建一個新的指針。
如下圖:
那么Git 又是怎么知道當前在哪一個分支上呢? 也很簡單,它有一個名為?HEAD
?的特殊指針,HEAD
指向當前所在的本地分支上。
在本例中,是仍然在?master
?分支上。 因為?git branch
?命令僅僅?創建?一個新分支,并不會自動切換到新分支中去。
因為上面日志信息:(HEAD -> master, testing)
,也說明HEAD
指針指向的是master
分支。
如下圖所示:
如圖所示,當前?master
?和?testing
?分支均指向校驗和以?b97ccfd
?開頭的提交對象。
2、查看分支列表
執行命令:git branch
。不用加任何參數。
如下圖:
該命令會列出當前本地版本庫中存在的所有分支,且當前正在工作的分支前會顯示*
。
和命令行路徑后面( )
中的內容相對應。
3、分支切換
要切換到一個已存在的分支,你需要使用?git checkout branchname
?命令。
我們現在切換到新創建的?testing
?分支去:
# 1.切換到testing分支上 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git checkout testing Switched to branch 'testing' # 提示:切換到分支“testing” # 2.查看當前正在工作的分支。 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) # 這里 $ git branch master * testing # 這里
現在?HEAD
?就指向?testing
?分支了。(即:HEAD
?會指向當前所在的分支)
提示:
在創建分支的時候,添加-b
選項,可以直接切換到新創建的分支上。
例如:git checkout -b testing
該命令等價于如下兩條命令:
-
git branch testing
:創建分支。 -
git checkout testing
:切換分支。
4、查看所有分支的最后一個提交
使用git branch -v
命令可以查看,所有分支的最后一次提交。
我們在testing
?分支修改readme.txt
文件,再進行一次提交。
# 1.查看當前工作的分支 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ git branch master * testing # 2.修改文件,提交新版本 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ echo "branch test v4" >> readme.txt L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ git commit -a -m '第4次提交,新增內容:branch test v4' warning: LF will be replaced by CRLF in readme.txt. The file will have its original line endings in your working directory [testing 25f0827] 第4次提交,新增內容:branch test v4 1 file changed, 1 insertion(+) # 3.查看所有分支的最后一次提價 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ git branch -v master b97ccfd 第3次提交,新增內容:branch test v3 * testing 25f0827 第4次提交,新增內容:branch test v4 # 4.查看版本庫歷史提交記錄 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ git log --graph --oneline * 25f0827 (HEAD -> testing) 第4次提交,新增內容:branch test v4 * b97ccfd (master) 第3次提交,新增內容:branch test v3 * f72a9fe 第2次提交,新增內容:branch test v2 * fa2439a 第1次提交,新增readme.txt文件
通過上面的日志信息,此時?HEAD
?指針的狀態如下圖:
可以看到?HEAD
?隨著在testing
?分支上的提交操作,自動向前移動。
5、刪除分支
使用命令:git branch -d branchname
。
但是要注意的是:若要刪除某分支,必須要保證當前工作的分支,不能是該分支。
這個時候我們需要先切換回master
分支。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) $ git checkout master Switched to branch 'master' L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git branch * master testing
此時?HEAD
?指針的狀態如下圖:
說明:git checkout master
這條命令做了兩件事。
是使 HEAD 指回?master
?分支。
是將工作目錄中文件,恢復成?master
?分支所指向提交的快照內容。
在切換分支時,一定要注意你工作目錄里的文件會被改變,你的工作目錄會恢復到該分支最后一次提交時的樣子。如果 Git 不能干凈利落地完成這個任務,它將禁止切換分支。(下面分支實戰中有詳細說明)
也就是說,你現在做修改的話,項目將始于?master
?分支版本。 本質上來講,這就是忽略?testing
分支所做的修改,以便于向另一個方向進行開發。
繼續我們開始刪除?testing
?分支。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git branch -d testing error: The branch 'testing' is not fully merged. If you are sure you want to delete it, run 'git branch -D testing'.
提示你:分支“testing”沒有合并到主分支,如果確定要刪除它,請運行git branch -D testing
命令。。
所以我們使用-D
選項刪除?testing
?分支。
# 1.刪除分支 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git branch -D testing Deleted branch testing (was 25f0827). # 2.查看本地庫中的分支,就只有master分支了 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git branch * master # 3.查看提交歷史記錄 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git log --graph --oneline * b97ccfd (HEAD -> master) 第3次提交,新增內容:branch test v3 * f72a9fe 第2次提交,新增內容:branch test v2 * fa2439a 第1次提交,新增readme.txt文件 # 可以看到對testing分支的修改,只要沒有合并,對master分支是沒有影響的。 # 4.查看可回退的提交歷史記錄 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ git reflog b97ccfd (HEAD -> master) HEAD@{0}: checkout: moving from testing to master 25f0827 HEAD@{1}: commit: 第4次提交,新增內容:branch test v4 b97ccfd (HEAD -> master) HEAD@{2}: checkout: moving from master to testing b97ccfd (HEAD -> master) HEAD@{3}: commit: 第3次提交,新增內容:branch test v3 f72a9fe HEAD@{4}: commit: 第2次提交,新增內容:branch test v2 fa2439a HEAD@{5}: commit (initial): 第1次提交,新增readme.txt文件 # 可以看到只要HEAD移動過,所有歷史軌跡都會保留在Git版本庫中。 # (也就是.git/objects目錄中的文件只能無限的增多,存儲了就不會刪除掉。)
提示:合并后的分支不僅無用,它的存在還會引起不必要的麻煩,一般都會刪除無用的分支。
原文鏈接:https://www.cnblogs.com/liuyuelinfighting/p/16820819.html
相關推薦
- 2022-09-12 ios開發UITableViewCell圖片加載優化詳解_IOS
- 2022-12-14 Rocksdb?Memtable數據結構源碼解析_Android
- 2022-10-01 Python類和對象基礎入門介紹_python
- 2022-09-03 python?解決數據庫寫入時float自動變為整數的問題_python
- 2023-01-15 PyQt5+QtChart實現柱狀圖的繪制_python
- 2022-03-20 C語言輸出任意邊長的菱形(用c語言輸出一個菱形)
- 2022-10-04 golang中time包之時間間隔格式化和秒、毫秒、納秒等時間戳格式輸出的方法實例_Golang
- 2022-07-19 分布式事務其中的那些坑
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支