06-Git分支相关的命令,如创建/删除/切换分支

Git分支(副本)

在版本控制过程中需要同时推进多个任务,此时可以为每个任务创建单独分支即开一个一模一样的副本 ,最终分支开发完后再合并到主分支提高开发效率

  • 使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候不会影响主线分支的运行
  • 各个分支在开发过程中,如果某一个分支开发失败不会对其他分支有任何影响 , 失败的分支删除重新开始即可
  • 分支可以简单理解为副本,一个分支就是 一个单独的副本(分支底层其实也是指针的引用)
  • 同一个仓库可以有多个分支,每一个分支都对应工作区和暂存区以及本地库(都需要添加暂存和提交本地), 各个分支相互独立互不干扰

分支和文件版本的概念: 一个分支对应多个文件版本,默认指向最后更新的那个文件版本

  • head指向的分支就是当前分支,在项目目录下我们只能看到当前分支的内容

使用git init命令创建本地仓库时默认会创建一个master分支,其他分支可以围绕主分支进行开发

常用命令

命令 功能
git branch 列出本地的所有分支的简略信息
git branch -r 列出所有的远程分支
git branch -a 列出所有的本地分支和远程分支
git branch [branch-name] 创建分支,分支的内容是基于当前分支复制的,包括文件版本信息
git checkout [branch-name] 切换分支要求分支必须存在 当前分支上的内容必须先提交到本地库才能切换到其他分支
git checkout [-b] [branch-name] 切换分支,如果分支不存在直接创建
git push [short-Name] [branch-name] 推送资源至远程仓库的某个分支
git merge [branch-name] 合并某个分支的资源到当前分支
git branch -d [branch-name] 删除某个分支,会做检查对于还没有合并的分支可能无法删除 删除分支时不能删除当前分支,只能删除其他分支
git branch -D [branch-name] 强制删除分支
git push [short-Name] --d [branch-name] 删除远程仓库中的某个分支

git branch -v(可省略): -v表示查看本地所有分支的详细信息,*代表当前所在的分支

bash 复制代码
#查看本地所有分支的详细信息
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch -v
#当前分支是mater分支的my first版本
* master 087a1a7 my first commit 

#查看本地所有分支的简略信息
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch
* master 

git branch 分支名: 创建分支, 分支的内容是基于当前分支复制的(包括指向的文件版本),创建后如果再修改主分支的内容也不会影响子分支

git branch -d/-D 分支名: 删除分支,-d表示删除时需要做各种检查,当删除没有合并的分支时会出现删除不了的情况,-D表示强制删除不做检查

bash 复制代码
#在当前分支的基础上创建hot-fix分支
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch hot-fix
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git branch -v
hot-fix 087a1a7 my first commit 
* master 087a1a7 my first commit

git checkout 分支名: 切换分支,当前分支上的内容必须先提交到本地库才能切换到其他分支

git checkout -b 分支名: 切换分支,如果分支不存在则直接创建,创建的分支的内容是基于当前分支复制的

bash 复制代码
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git checkout hot-fix
Switched to branch 'hot-fix'
#发现当先分支已由master改为hot-fix
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)

#查看hot-fix分支上的文件内容发现与master分支上的内容相同
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ cat hello.txt
hello git! hello atguigu!
#在hot-fix分支上同样需要进行文件的修改-->提交文件到暂存区-->提交到本地库-->查看版本的信息(不会影响到主分支的内容)

master,hot-fix其实都是指向具体版本记录的指针,当前所在的分支其实是由HEAD决定的,所以创建分支的本质就是多创建一个指针

  • HEAD如果指向master: 那么我们现在就在master分支上 , master分支指向具体的版本
  • HEAD如果指向hotfix: 那么我们现在就在hotfix分支上, hotfix分支也指向具体的版本

每个分支都是独立的副本(都有各自的文件),修改创建的分支内容是不会影响主分支的内容

bash 复制代码
#在hot-fix分支上做修改
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ vim hello.txt
hello git! hello atguigu! hot-fix test
#添加暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ git add hello.txt
#提交本地库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ git commit -m "hot-fix commit" hello.txt

#切换到mster分支
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ git checkout master

#master分支上还是第一次提交的版本内容
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ cat hello.txt
hello git! hello atguigu!

git merge 分支名: 将指定分支合并到当前分支,如在master分支执行合并命令,表示将其他分支上的资源合并到主分支,合并分支时会有提示输入wq可退出

bash 复制代码
#在maste分支上做修改
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ vim hello.txt
hello git! hello atguigu! master test
#添加暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git add hello.txt
#提交本地库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git commit -m "master test" hello.txt
[master f363b4c] master test commit
1 file changed, 1 insertion(+), 1 deletion(-)

#再次修改在hot-fix分支上做修改
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (hot-fix)
$ vim hello.txt
hello git! hello atguigu! hot-fix test
hello git! hello atguigu! hot-fix test
#添加暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git add hello.txt
#提交本地库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git commit -m "hot-fix test test" hello.txt
[master f363b4c] hot-fix test test commit
1 file changed, 1 insertion(+), 1 deletion(-)

#在master分支上合并hot-fix分支
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
$ git merge hot-fix
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt#合并时hello.txt文件有冲突
Automatic merge failed; fix conflicts and then commit the result
#冲突产生的表现:后面状态为 MERGING
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master|MERGING)
#查看状态(检测到有文件有两处修改)
$ git status
On branch master
You have unmerged paths.
 (fix conflicts and run "git commit")
 (use "git merge --abort" to abort the merge)
Unmerged paths:
 (use "git add <file>..." to mark resolution)
 both modified: hello.txt
no changes added to commit (use "git add" and/or "git commit -a")

冲突合并

冲突合并: 合并分支时,如果有两个/多个分支对同一个文件的同一个位置有两套完全不同的修改时,Git不知道使用哪一个分支修改的值, 此时就发生了冲突

  • 方案: 编辑有冲突的文件并删除特殊符号,人为决定要留下的内容,将解决完冲突的文件加入暂存区,最后执行提交命令(不带文件名)提交到本地仓库
bash 复制代码
#编写冲突的文件
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master|MERGING)
$ vim hello.txt
<<<<<<< HEAD
当前分支的冲突代码 
=======
合并过来分支的冲突代码 
>>>>>>> hot-fix

#添加到暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master|MERGING)
$ git add hello.txt
#提交本地库(此时使用git commit命令时不能带文件名)
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master|MERGING)
$ git commit -m "merge hot-fix"
[master 69ff88d] merge hot-fix
#发现后面MERGING消失,变为正常
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/SH0720 (master)
相关推荐
股票GPT分析1 小时前
《Python 股票交易分析:开启智能投资新时代》(二)
大数据·服务器·python·c#·fastapi
Viktor_Ye2 小时前
实现金蝶云星空与钉钉数据无缝集成的技术方法
java·大数据·钉钉
Mephisto.java2 小时前
【大数据学习 | Spark-Core】关于distinct算子
大数据·hive·hadoop·redis·spark·hbase
King's King2 小时前
蜜雪冰城也入局智慧物流,包括智能控制系统集成、机器人研发销售,开始招兵买马了...
大数据·人工智能·机器人
十二点的泡面2 小时前
大数据面试题每日练习-- Hadoop是什么?
大数据·hadoop·分布式
说私域3 小时前
社交电商专业赋能高校教育与产业协同发展:定制开发AI智能名片及2+1链动商城小程序的创新驱动
大数据·人工智能·小程序
小黑屋说YYDS3 小时前
ElasticSearch7.x入门教程之集群安装(一)
elasticsearch
夏沫的梦4 小时前
Git命令使用与原理详解
git·gitlab·github
Kika写代码5 小时前
【大数据技术基础】 课程 第8章 数据仓库Hive的安装和使用 大数据基础编程、实验和案例教程(第2版)
大数据·数据仓库·hive
zhixingheyi_tian6 小时前
Spark 之 SparkSessionExtensions
大数据·分布式·spark