【Git】一文带你入门Git分布式版本控制系统(分支管理策略、Bug分支)

简介: 【Git】一文带你入门Git分布式版本控制系统(分支管理策略、Bug分支)

一、分支管理策略

通常,合并分支时,如果可能,Git 会用 Fast forward 模式,但这种模式下,删除分支后,会丢掉分支信息。


如果要强制禁用 Fast forward 模式,Git 就会在 merge 时生成一个新的 commit,这样,从分支历史上就可以看出分支信息。


下面我们实战一下 --no-ff 方式的 git merge

1、创建 dev 分支,修改 txt 并提交

我们创建新的 dev 分支,修改 txt 文件,推到暂存区并提交至本地仓库

46142569a8494d04beac809578e0c470.png

git checkout -b dev
git branch
git add readme.txt
git commit -m "add merge"

c7e9a4e5bd4241da842322f3ca2a0abc.png

2、切换至主分支并合并

切换到 master 主分支,准备合并(请注意 --no-ff 参数,表示禁用 Fast forward)

git checkout master
git merge --no-ff -m "merge with no-ff" dev

2d96125bd86f4ffa8376b496478e05db.png

3、查看分支历史

git log --graph --pretty=oneline --abbrev-commit

摘自 廖雪峰的官方网站

09994ffa54bf47809486e2a11769776f.png

0e6f4d26f970447aab9146348a3d4a99.png

二、Bug 分支

Bug 可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。


1、不具备提交条件的 dev 分支

当我们正在 dev 分支上进行工作还没有提交(并不是不想提交,而是工作了一半,没法提交),这时出现了一个要紧急修改的 Bug,我们便可以使用 stash 功能,把当前工作现场“储藏”起来。

git branch
git status

43ab70b49f144768a533df33bbd5f64b.png

2、储藏工作现场

我们使用 stash 把当前工作现场(未完成的 dev 分支)储藏起来,之后查看状态(很干净)

git stash
git status

275b01d7e9f34882bd8e250be2ef9b3b.png

3、修复 Bug

假定我们要在 master 分支上修复 Bug(代号 101)

我们要进行以下 Bug(代号 101)的修改

55a0b7a686c64e30b92bb2c29839d077.png

9fce1982063742ea9b01ecc81f37b4e3.png

我们首先切换到 master 分支,之后创建一个临时分支 issue-101,并提交

9ffd98dc1c47467b8c0f14983e62ce4d.png

切换至 master 分支,合并

至此,Bug 修复完成

git checkout master
git merge --no-ff -m "merged bug fix 101" issue-101

ca5f8ad9a11b4280bee4458668fa7d40.png

4、恢复 dev 分支

我们先切换到 dev 分支,查看当前状态

git checkout dev
git status

e51ee8c880804ad1a8ab9ec86a0ae6ed.png

Git 把 stash 存放在某个位置了,我们需要找回工作现场 dev 分支

669dcd2f2a6145288c701b00d3a981b0.png

之后我们需要对其进行恢复(两种方法)

方法一:用 git stash apply 恢复,但是恢复后,stash 内容并不删除,我们需要用 git stash drop 来删除

方法二:用 git stash pop,恢复的同时把 stash 内容也删了

7495b81c0e9349e6ac4067f68eae49d1.png

之后删除 issue-101 分支,查看当前分支情况(要丢弃一个没有被合并过的分支,可以通过 git branch -D <name> 强行删除)

8e7001e86a08405b9c8294bbae98c054.png

45fc82a82c6542bdb2ff4986377d8db3.png


相关文章
|
28天前
|
开发工具 git
图解Git——分支的新建与合并《Pro Git》
在Git开发中,新建与合并分支是常见的操作。以实际开发为例:为实现新需求创建分支`iss53`进行开发;遇紧急Bug时,切换至线上分支创建`hotfix`修复并合并回线上分支,再切换回`iss53`继续工作。完成`iss53`后,切换到`master`合并。若出现冲突,使用`git status`查看,手动编辑解决冲突后标记为已解决并提交。图形化工具如`git mergetool`也可辅助解决冲突。
44 9
|
2天前
|
开发工具 git 开发者
vscode+git解决远程分支合并冲突
通过这些详细步骤,您可以掌握如何使用VSCode和Git高效地解决远程分支合并冲突,提高开发效率和代码质量。希望这些内容对您的学习和工作有所帮助。
125 86
|
9天前
|
安全 开发工具 git
git分布式版本控制系统及在码云上创建项目并pull和push
通过本文的介绍,我们详细讲解了Git的基本概念和工作流程,并展示了如何在码云上创建项目及进行pull和push操作。Git作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码变更和协作开发。希望本文能帮助您更好地理解和使用Git及码云,提高开发效率和代码质量。
37 18
|
8天前
|
安全 开发工具 git
git分布式版本控制系统及在码云上创建项目并pull和push
通过本文的介绍,我们详细讲解了Git的基本概念和工作流程,并展示了如何在码云上创建项目及进行pull和push操作。Git作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码变更和协作开发。希望本文能帮助您更好地理解和使用Git及码云,提高开发效率和代码质量。
29 16
|
28天前
|
开发工具 git 开发者
图解Git——分布式Git《Pro Git》
分布式工作流程主要分为三种模式:集中式工作流、集成管理者工作流和主管与副主管工作流。集中式工作流中,所有开发者同步同一个中央仓库,通过拉取和提交协作;集成管理者工作流中,开发者拥有自己的仓库,通过 `fork` 和请求合并进行协作;主管与副主管工作流适用于大型项目,由主管最终合并代码,副主管负责各自模块。贡献代码时,需考虑活跃贡献者数量、工作流程、提交权限等因素,确保代码合并成功并遵循提交准则。
40 11
|
28天前
|
安全 开发工具 git
图解Git——分支管理《Pro Git》
分支管理是 Git 中的重要机制,支持并行开发和清晰的工作流。常用命令包括:`git branch` 列出所有分支,`git branch -v` 查看最后一次提交,`git branch --merged` 和 `git branch --no-merged` 分别查看已合并和未合并的分支。创建新分支用 `git branch &lt;branch-name&gt;`,删除分支用 `git branch -d`(已合并)或 `-D`(强制删除)。建议定期清理已完成任务的分支,保持代码库整洁,并使用有意义的分支命名规范。注意强制删除未合并分支时可能丢失数据。
31 5
|
28天前
|
存储 项目管理 开发工具
图解Git——分支开发工作流《Pro Git》
分支开发工作流利用Git的分支功能,支持灵活的项目管理。长期分支如`master`和`develop`分别保存稳定和开发中的代码;短期主题分支用于开发单一特性或修复问题,完成后合并到主分支。此模式确保代码稳定性,支持并行开发、便于审查和灵活调整。建议维护明确的长期分支,保持主题分支短小精悍,并定期清理无用分支。配置上可保护关键分支,遵循命名规范。
54 7
|
28天前
|
存储 缓存 Java
图解Git——远程分支《Pro Git》
远程分支是 Git 中用于管理分布式协作的关键概念。远程引用指向远程仓库中的分支和标签,常用 `git ls-remote` 或 `git remote show` 查看。日常开发中,通常使用远程跟踪分支(如 `origin/main`)与远程分支交互,简化远程仓库状态的管理和使用。远程跟踪分支记录远程分支的状态,但本身只读。
27 6
|
2天前
|
NoSQL Java Redis
Springboot使用Redis实现分布式锁
通过这些步骤和示例,您可以系统地了解如何在Spring Boot中使用Redis实现分布式锁,并在实际项目中应用。希望这些内容对您的学习和工作有所帮助。
112 83
|
4月前
|
NoSQL Java Redis
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?
Redis分布式锁在高并发场景下是重要的技术手段,但其实现过程中常遇到五大深坑:**原子性问题**、**连接耗尽问题**、**锁过期问题**、**锁失效问题**以及**锁分段问题**。这些问题不仅影响系统的稳定性和性能,还可能导致数据不一致。尼恩在实际项目中总结了这些坑,并提供了详细的解决方案,包括使用Lua脚本保证原子性、设置合理的锁过期时间和使用看门狗机制、以及通过锁分段提升性能。这些经验和技巧对面试和实际开发都有很大帮助,值得深入学习和实践。
太惨痛: Redis 分布式锁 5个大坑,又大又深, 如何才能 避开 ?