最简单Git进阶教程
2023-06-13 09:18:50 时间
什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)
git分支操作流程
分支的好处
同时并行推进多个功能开发,提高开发效率。 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
Git分支的操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git branch -d name | 删除分支 |
git branch -b name | 创建分支并切换到这个分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
查看当前分支
[root@boysec.cn ~/git_data]$git branch
* master
[root@boysec.cn ~/git_data]$git branch -v
* master 562b1b9 add boysec
创建分支
[root@boysec.cn ~/git_data]$git branch testing
[root@boysec.cn ~/git_data]$git branch -v
* master 562b1b9 add boysec
testing 562b1b9 add boysec
创建新分支并切换到指定分支
[root@boysec.cn ~/git_data]$git checkout -b tes # 会创建新分支斌切换,分支存在则会报错。
Switched to branch 'testing'
[root@boysec.cn ~/git_data]$git branch -v
master 562b1b9 add boysec
* test 562b1b9 add boysec
testing 562b1b9 add boysec
查看分支指向
[root@boysec.cn ~/git_data]$git log --oneline --decorate
562b1b9 (HEAD, testing, test, master) add boysec
a6576d2 modified a
d3dfcbb commit a
切换到指定分支
切换到test分支
[root@boysec.cn ~/git_data]$git checkout test
[root@boysec.cn ~/git_data]$git branch
master
* test
testing
在当前分支创建文件并提交到本地仓库
[root@boysec.cn ~/git_data]$git commit -m "commit test"
[test 6f13b3a] commit test
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 b
create mode 100644 test
[root@boysec.cn ~/git_data]$ls
a b test
切换到master分支查看文件
[root@boysec.cn ~/git_data]$git checkout master
Switched to branch 'master'
[root@boysec.cn ~/git_data]$git branch -v
* master 562b1b9 add boysec
test 6f13b3a commit test
testing 562b1b9 add boysec
[root@boysec.cn ~/git_data]$ls
a
在master分支下创建文件
[root@boysec.cn ~/git_data]$touch master
[root@boysec.cn ~/git_data]$git add .
[root@boysec.cn ~/git_data]$git commit -m "commit master"
[master a543b45] commit master
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 master
[root@boysec.cn ~/git_data]$ll
total 4
-rw-r--r-- 1 root root 7 Dec 6 22:54 a
-rw-r--r-- 1 root root 0 Dec 8 11:53 master
合并分支
将test和master分支合并
[root@boysec.cn ~/git_data]$git branch
* master
test
testing
[root@boysec.cn ~/git_data]$git merge test
Merge made by the 'recursive' strategy.
b | 0
test | 0
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 b
create mode 100644 test
查看提交日志
[root@boysec.cn ~/git_data]$git log --oneline --decorate
04bfdc1 (HEAD, master) Merge branch 'test'
a543b45 commit master
6f13b3a (test) commit test
562b1b9 (testing) add boysec
a6576d2 modified a
d3dfcbb commit a
查看文件
[root@boysec.cn ~/git_data]$ll
total 4
-rw-r--r-- 1 root root 7 Dec 6 22:54 a
-rw-r--r-- 1 root root 0 Dec 8 11:55 b
-rw-r--r-- 1 root root 0 Dec 8 11:53 master
-rw-r--r-- 1 root root 0 Dec 8 11:55 test
冲突合并
在master分支下编辑a文件并提交
[root@boysec.cn ~/git_data]$echo "master" >> a
[root@boysec.cn ~/git_data]$cat a
boysec
master
[root@boysec.cn ~/git_data]$git commit -am "modified a on master"
[master bacb118] modified a
1 file changed, 1 insertion(+)
切换到test分支下编辑文件并提交
[root@boysec.cn ~/git_data]$git checkout test
Switched to branch 'test'
[root@boysec.cn ~/git_data]$echo test >> a
[root@boysec.cn ~/git_data]$cat a
boysec
test
[root@boysec.cn ~/git_data]$git commit -am "modified a on test"
切换到master分支并合并test分支,此时两个分支的文件内容是有冲突的
[root@boysec.cn ~/git_data]$git checkout master
Switched to branch 'master'
[root@boysec.cn ~/git_data]$git merge test
自动合并 a
冲突(内容):合并冲突于 a
自动合并失败,修正冲突然后提交修正的结果。
此时冲突内容会自动写到文件里
[root@boysec.cn ~/git_data]$cat a
boysec
<<<<<<< HEAD
master # 当前分支的代码
=======
test # 合并过来的代码
>>>>>>> test
冲突产生的原因:
合并分支时,两个分支在 同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须 人为决定新代码内容。
要想解决冲突,我们需要手动修改文件,保留最终的文件,然后重新提交
[root@boysec.cn ~/git_data]$vim a
[root@boysec.cn ~/git_data]$git commit -am "merge test to master"
[master f712a5c] merge test to master
查看提交日志
[root@boysec.cn ~/git_data]$git log --oneline --decorate
f712a5c (HEAD, master) merge test to master
2acf568 (test) modified a on test
bacb118 modified a
04bfdc1 Merge branch 'test'
a543b45 commit master
6f13b3a commit test
562b1b9 (testing) add boysec
a6576d2 modified a
d3dfcbb commit a
删除指定分支
[root@boysec.cn ~/git_data]$git branch -d testing
Deleted branch testing (was 562b1b9).
创建分支和切换分支图解
- master、test 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD决定的。所以创建分支的本质就是多创建一个指针。
- HEAD 如果指向
master
,那么我们现在就在 master 分支上。 - HEAD 如果指向
test
,那么我们现在就在 test 分支上。 - 所以切换分支的本质就是移动 HEAD 指针。
git标签使用
给当前版本创建标签
[root@boysec.cn ~/git_data]$git tag v1.0 -m "a b master test version v1.0"
给指定版本打标签
[root@boysec.cn ~/git_data]$git log --oneline
f712a5c merge test to master
2acf568 modified a on test
bacb118 modified a
04bfdc1 Merge branch 'test'
a543b45 commit master
6f13b3a commit test
562b1b9 add boysec
a6576d2 modified a
d3dfcbb commit a
[root@boysec.cn ~/git_data]$git tag -a v2.0 562b1b9 -m "add boysec version v2.0"
查看标签
[root@boysec.cn ~/git_data]$git tag
v1.0
v2.0
回滚到指定标签
首先查看当前版本文件
[root@boysec.cn ~/git_data]$ll
total 4
-rw-r--r-- 1 root root 14 Dec 8 12:45 a
-rw-r--r-- 1 root root 0 Dec 8 11:55 b
-rw-r--r-- 1 root root 0 Dec 8 11:59 master
-rw-r--r-- 1 root root 0 Dec 8 11:55 test
回滚到指定版本
[root@boysec.cn ~/git_data]$git reset --hard v2.0
HEAD is now at 562b1b9 add boysec
再次查看文件
[root@boysec.cn ~/git_data]$ll
total 4
-rw-r--r-- 1 root root 7 Dec 8 12:59 a
git
相关文章
- Python自学教程2-大牛们怎么写注释
- python操作gitlab_git的使用教程
- (数据科学学习手札141)利用Learn Git Branching轻松学习git常用操作
- nginx最全教程_nginx使用教程
- AcrobatDC 2019专业版中安装包及激活教程
- 一款强大的PDF编辑加密转换软件,Acrobat XI 安装教程
- RNA-seq 详细教程:可视化(12)
- [C++STL教程]1.vector容器是什么?可能是全网最好的教程
- 【Flutter】Flutter 开发环境搭建 ( 2021年08月25日 补充最新资料 | 最新安装教程 )
- 【Git】Git 分支管理 ( 创建并切换分支 git switch -c dev | 切换分支 git switch dev )
- 【Git】Git 分支管理 ( 删除远程分支 | 查看远程分支 git branch -a | 删除远程分支 git push origin --delete feature1 )
- Git 2.40 发布,包括 git jump 工具的更新、cat-file 工具的增强以及提高 Windows 上响应速度
- MySQL中索引的定义以及操作新手教程
- Oracle安装快速入门教程(oracle的安装教程)
- 初学者必备:Linux Git入门教程(linuxgit教程)
- Linux内核管理:Git的力量(linux内核git)
- 安装linux下Git安装指南(linux下git)
- Linux下编译安装MySQL教程(linux编译mysql)
- wordpress国内网速慢加速及防DDOS攻击快速CF切换教程
- 「简易教程:Linux命令行分屏技巧」(linux命令行分屏)
- MySQL过程编译简易教程(mysql过程编译)
- Linux安装教程:如何快速学习Linux系统的安装步骤?(linux安装教程)
- Linux安装Git简易教程(linux 下载git)