《Git分支实战:从创建到合并的全流程》

前面我们聊了Git的日常操作和入门基础,今天终于要啃下版本控制里的"核心技能"------分支。你是不是遇到过:写新功能时不敢动主代码?线上Bug要修,手头的开发还没做完?多人协作时代码越改越乱?这些问题,用对Git分支就能一次性解决。这篇我们从分支的基础操作(创建/切换/删除)讲到实战场景(并行开发/紧急修复),最后补上最头疼的"冲突解决"技巧,帮你把分支用成团队协作的"效率工具"。

Git的默认分支就是master。你所做的commit会在master分支上自动移动。在多次提交操作之后,master分支指向最后那个commit object(提交对象链)。

Git的master分支并不特殊,和其他分支没有区别。之所以几乎每一个仓库都有master分支,是因为git init 命令默认创建它。

分支创建

bash 复制代码
通过git branch 来查看和创建分支

git branch dev

分支切换到dev

git checkout dev

创建分支和切换分支同时完成

git checkout -b dev2

例如,在dev2分支创建文件并添加到暂存区和版本库的过程在其他分支可以看到,但是最后提交后的文件无法在其他分支看到。(需要分支合并)

注意:文件哪个分支提交算哪个分支的,比如dev2只是放到了暂存区,如果没有提交而是用dev分支进行了提交那么只会在dev分支显示,其他分支都没有。

分支删除

bash 复制代码
# git branch -d 分支名

git branch -d dev

1,不能删除自己所在的分支

2,可以删除一个合并后的或者没有发生变化的分支

3,如果一个分支发生了变化(添加或修改文件)不能删除

强制删除

bash 复制代码
git branch -D dev2

分支合并

bash 复制代码
git merge 分支名

分支的本质

master指向的是提交

HEAD是指向当前的分支,当前在哪个分支就指向哪个分支

分支冲突

当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:

  • 处理文件中冲突的地方

  • 将解决完冲突的文件加入暂存区(add)

  • 提交到仓库(commit)

Git stash

作用是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上回复出堆栈中的内容。也就是说,stash中的内容不仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存在堆栈中。

bash 复制代码
git stash [-u/-a/-all]
  • 默认情况下,git stash 会保存已跟踪文件的修改

  • 若要同时保存未跟踪文件(未通过 git add 加入版本控制的新文件,需要使用 -u)来保存

  • 若要保存忽略文件(如.gitignore中指定的文件),可以使用 -a 或 -all 参数,它会保存所有未提交的修改(包括跟踪,未跟踪,忽略的文件)

总结:执行git stash后,工作区和暂存区会恢复到最近一次提交(HEAD)的状态,后续可通过

git stash pop 或者 git stash apply 恢复保存的内容。

pop和apply的区别

1.git stash apply

  • 仅将 stash 中的修改应用到当前工作区,不会删除该 stash 记录。

  • 适用场景:需要在多个分支重复应用同一份 stash 时(例如同一修改需在多个分支测试),可以多次使用 apply。

  • 示例:git stash apply stash@{0}(指定应用第 0 个 stash,不指定则默认最新的)。

bash 复制代码
git stash apply

2.git stash pop

  • 将 stash 中的修改应用到当前工作区后,会自动删除该 stash 记录。

  • 适用场景:确认只需要应用一次 stash,且之后不再需要该记录时,用 pop 更简洁。

  • 示例:git stash pop(默认应用最新的 stash 并删除它)。

bash 复制代码
git stash pop

展示所有现存的stash记录

bash 复制代码
git stash list

注意:取出一个文件后需要提交后才能取出第二个,不然会报错。

git的分支整体浏览图如下:

主要包含以下几个分支:

  • master:git默认注分支(这里不做操作)。

  • stable:稳定分支,替代master,主要用来版本发布。

  • develop:日常开发分支。该分支正常保存了开发的最新代码。

  • feature:具体的功能开发分支,只与develop分支交互。

  • release:release分支可以认为是stable分支的未测试版本。比如说某一期的功能全部开发完成,那么就将develop分支合并到release分支,测试没有问题并且到了发布日期就合并到stable分支,进行发布。

  • bugfix:线上bug修复分支。

相关推荐
Chloeis Syntax2 小时前
MySQL初阶学习日记(5)--- 联合查询
java·笔记·学习·mysql
ArabySide2 小时前
【Spring Boot】用Spring AOP优雅实现横切逻辑复用
java·spring boot·后端
snow123f2 小时前
Lambda 表达式怎么用
java·开发语言·线程
梓䈑2 小时前
【C++】C++11(右值引用和移动语义、可变参数模板 和 包装器)
java·开发语言·c++
深海蓝山2 小时前
WebSocket(java版)服务示例
java·websocket·网络协议
Howe~zZ2 小时前
mybatis 报错解决方案ORA-01795: maximum number of expressions in a list is 1000
java·服务器·前端
LiamTuc2 小时前
Java 抽象类详解
java·开发语言
南山乐只2 小时前
Spring Boot 2.x => 3.x 升级指南
java·spring boot·后端
任子菲阳2 小时前
学Java第五十五天——多线程&JUC
java·开发语言