User-Profile-Image
hankin
  • 5
  • Java
  • Kotlin
  • Spring
  • Web
  • SQL
  • MegaData
  • More
  • Experience
  • Enamiĝu al vi
  • 分类
    • Zuul
    • Zookeeper
    • XML
    • WebSocket
    • Web Notes
    • Web
    • Vue
    • Thymeleaf
    • SQL Server
    • SQL Notes
    • SQL
    • SpringSecurity
    • SpringMVC
    • SpringJPA
    • SpringCloud
    • SpringBoot
    • Spring Notes
    • Spring
    • Servlet
    • Ribbon
    • Redis
    • RabbitMQ
    • Python
    • PostgreSQL
    • OAuth2
    • NOSQL
    • Netty
    • MySQL
    • MyBatis
    • More
    • MinIO
    • MegaData
    • Maven
    • LoadBalancer
    • Kotlin Notes
    • Kotlin
    • Kafka
    • jQuery
    • JavaScript
    • Java Notes
    • Java
    • Hystrix
    • Git
    • Gateway
    • Freemarker
    • Feign
    • Eureka
    • ElasticSearch
    • Docker
    • Consul
    • Ajax
    • ActiveMQ
  • 页面
    • 归档
    • 摘要
    • 杂图
    • 问题随笔
  • 友链
    • Spring Cloud Alibaba
    • Spring Cloud Alibaba - 指南
    • Spring Cloud
    • Nacos
    • Docker
    • ElasticSearch
    • Kotlin中文版
    • Kotlin易百
    • KotlinWeb3
    • KotlinNhooo
    • 前端开源搜索
    • Ktorm ORM
    • Ktorm-KSP
    • Ebean ORM
    • Maven
    • 江南一点雨
    • 江南国际站
    • 设计模式
    • 熊猫大佬
    • java学习
    • kotlin函数查询
    • Istio 服务网格
    • istio
    • Ktor 异步 Web 框架
    • PostGis
    • kuangstudy
    • 源码地图
    • it教程吧
    • Arthas-JVM调优
    • Electron
    • bugstack虫洞栈
    • github大佬宝典
    • Sa-Token
    • 前端技术胖
    • bennyhuo-Kt大佬
    • Rickiyang博客
    • 李大辉大佬博客
    • KOIN
    • SQLDelight
    • Exposed-Kt-ORM
    • Javalin—Web 框架
    • http4k—HTTP包
    • 爱威尔大佬
    • 小土豆
    • 小胖哥安全框架
    • 负雪明烛刷题
    • Kotlin-FP-Arrow
    • Lua参考手册
    • 美团文章
    • Java 全栈知识体系
    • 尼恩架构师学习
    • 现代 JavaScript 教程
    • GO相关文档
    • Go学习导航
    • GoCN社区
    • GO极客兔兔-案例
    • 讯飞星火GPT
    • Hollis博客
    • PostgreSQL德哥
    • 优质博客推荐
    • 半兽人大佬
    • 系列教程
    • PostgreSQL文章
    • 云原生资料库
    • 并发博客大佬
Help?

Please contact us on our email for need any support

Support
    首页   ›   More   ›   Git   ›   正文
Git

Git分支管理—4

2020-05-31 00:24:36
1464  0 0
参考目录 隐藏
1) 分支的必要性
2) 查看分支
3) 分支创建和切换
4) 分支合并
5) 以图表方式查看分支
6) 分支衍合
7) 退回到之前的状态
8) 解决冲突
9) 冲突解决
10) 小结

阅读完需:约 8 分钟

上一篇关于Git的文章:

Git基操学习—3

Svn 中也有分支管理,但是很 low,Git 的分支管理非常强大!

分支的必要性

小伙伴们都知道,我们在完成一个项目时,不可能是“单线程”开发的,很多时候任务是并行的,举个栗子:项目 2.0 版本上线了,现在要着手开发 3.0 版本,同时 2.0 版本可能还有一些 bug 需要修复,这些 bug 修复之后我们可能还会发 2.1,2.2,2.3 这些版本,我们不可能等所有 bug 都修复完了再去开发 3.0 版本,修复 2.0 的 bug 和开发 3.0 的新功能是两个并行的任务,这个时候我们 3.0 的功能开发直接在 master 分支上进行肯定不合适,我们要保证有一个稳定,可以随时发版本的分支存在(一般情况下这个角色由 master 分支来扮演),此时我们就可以灵活的使用 Git 中的分支管理功能:

  1. 创建一个长期分支用来开发 3.0 功能,假设这个分支的名字就叫 v3,我们在 v3 上添加新功能,并不断测试,当 v3 稳定后,将 v3 合并到 master 分支上。
  2. 创建一个特性分支用来修复 2.0 的 bug ,一旦 bug 修复成功,就将该分支合并到 master 上,一旦发现新 bug ,就立马再创建分支进行修复,修复成功之后再合并。

以上两个步骤同步进行,这在 Svn 中简直是不可想象的,因为 Svn 的分支管理太 low,而 Git 能够让我们做到随心所欲的创建、合并和删除分支。

git分支中常用指令:

# 列出所有本地分支
git branch

# 列出所有远程分支
git branch -r

# 新建一个分支,但依然停留在当前分支
git branch [branch-name]

# 新建一个分支,并切换到该分支
git checkout -b [branch]

# 合并指定分支到当前分支
$ git merge [branch]

# 删除分支
$ git branch -d [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

查看分支

我们可以通过 git branch 命令来查看当前仓库有哪些分支,而我们处于哪一个分支中,如下:

git branch 命令不只是可以创建与删除分支。 如果不加任何参数运行它,会得到当前所有分支的一个列表

git branch -d dev   # 删除dev分支 
git branch -a # 查看所有分支

这里显示当前仓库只有一个 master 分支,这是 git 默认创建出来的,master 前面的 * 表示我们当前处于这一个分支中。

分支创建和切换

我们可以利用 git branch <分支名> 命令来创建一个分支,然后利用 git checkout <分支名> 来切换分支,如下:

如果小伙伴觉得这样太麻烦,可以通过 git checkout -b <分支名> 来一步到位,创建并切换分支,如下:

也可以通过 git checkout - 命令来切换回上一个分支,如下:

分支合并

1、创建一个temp.txt文件,通过master提交并push到远程仓库

2、切换到dev分支,修改temp.txt内容并提交

该项目有一个测试文件 temp.txt,我们修改它的内容,并通过dev分支提交一下。

vim temp.txt 
cat temp.txt 
git add temp.txt 
git commit -m "dev commit"

3、切换回master分支,查看temp.txt文件是否有修改

git checkout master 
cat temp.txt

大家可以看到我们刚才增加的一行内容不见了,嘿嘿。因为那个提交是在dev分支上,而master分支没 有变化。好了,下面我们来演示一下快速合并分支。

fast-forward 方式表示当条件允许时, git 直接把 HEAD 指针指向合并分支的头,完成合并,这种方式合并速度快,但是在整个过程中没有创建 commit,所以如果当我们删除掉这个分支时就再也找不回来了

git merge 方式强行关闭 快速合并 fast-forward

通过 git merge --no-ff <分支名> 命令将 fa 分支合并到 master 分支上。其中 –no-ff 表示强行关闭 fast-forward 方式。

想要合并分支,我们先切换到 master 分支上,然后执行 git merge --no-ff fa 命令即可完成分支合并。

合并成功后,我们看到 master 分支上的 git01.txt 上已经有了 fa 分支中的内容了。

以图表方式查看分支

我们可以通过 git log --graph 命令来直观的查看分支的创建和合并等操作,如下图:

分支衍合

所谓的分支衍合其实也是分支合并的一种方式,下面我们就来看看这个分支衍合到底是什么样的。现在我的 master 分支的内容和 fa 分支的内容是保持一致的,fa 是从 master 中创建出来的,如下图:

现在我向 fa 和 master 中各自做一次提交,如下图:

此时我们执行如下两条命令将两个分支合并:

$ git checkout fa
$ git rebase master

rebase 命令在执行的过程中会首先把 fa 中的每个 commit 取消,并且将之保存为临时 patch ,再将 fa 分支更新为最新的 master 分支,然后再把那些临时的 patch 应用到 fa 上,此时 fa 分支将指向新创建的 commit 上,那些老的 commit 将会被丢弃,这些被丢弃的 commit 在执行 git gc 命令时会被删除。合并后的分支如下图:

上面的 git rebase master 命令在执行的过程中有可能会发生冲突,发生冲突时我们有两种方案,一种直接退回到之前的状态,另一种就是解决冲突继续提交。

退回到之前的状态

我们可以通过如下命令来回到之前的状态:

$ git rebase --abort

解决冲突

不过大多数情况下我们都是要解决冲突的,解决之后继续提交。此时我们用编辑器打开冲突的文件,看到的内容可能是这样的:

上面的是 HEAD 中的内容,下面的是要合并的内容,根据自己的需求编辑文件,编辑完成之后,通过如下两条命令继续完成合并:

$ git add git01.txt
$ git rebase --continue

冲突解决

我们前面提到了在分支衍合时出现冲突的解决方案,其实普通的合并也有可能出冲突,出现冲突很正常,解决就是了,git merge 合并分支时如果出现冲突还是先重新编辑冲突文件,编辑完成之后,再执行 git add 和 git commit 即可。

小结

大家在实际操作中可以发现在我们创建、合并、删除分支的速度非常快吧,这和直接在master分支上工 作效果是一样的,但过程更安全,更可靠。下面我们来简单的总结一下:

  • 查看分支 git branch -a
  • 创建分支 git branch name
  • 切换分支 git checkout name
  • 创建并切换 git checkout -b name
  • 合并某分支到当前分支 git merge name
  • 删除分支 git branch -d name

更多关于Git分支的详情:

https://blog.csdn.net/justlpf/article/details/80401839

如本文“对您有用”,欢迎随意打赏作者,让我们坚持创作!

0 打赏
Enamiĝu al vi
不要为明天忧虑.因为明天自有明天的忧虑.一天的难处一天当就够了。
543文章 68评论 294点赞 594031浏览

随机文章
Java—LinkedHashMap
5年前
SpringCloud—Eureka(一)
5年前
Java—Future、FutureTask、CompletionService、CompletableFuture多线程并发中归集问题的效率对比
5年前
Spring Security—登录添加验证码
5年前
Spring Data Jpa简介
5年前
博客统计
  • 日志总数:543 篇
  • 评论数目:68 条
  • 建站日期:2020-03-06
  • 运行天数:1927 天
  • 标签总数:23 个
  • 最后更新:2024-12-20
Copyright © 2025 网站备案号: 浙ICP备20017730号 身体没有灵魂是死的,信心没有行为也是死的。
主页
页面
  • 归档
  • 摘要
  • 杂图
  • 问题随笔
博主
Enamiĝu al vi
Enamiĝu al vi 管理员
To be, or not to be
543 文章 68 评论 594031 浏览
测试
测试
看板娘
赞赏作者

请通过微信、支付宝 APP 扫一扫

感谢您对作者的支持!

 支付宝 微信支付