《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修复分支。

相关推荐
带刺的坐椅25 分钟前
Solon AI Skills 会是 Agent 的未来吗?
java·agent·langchain4j·solon-ai
jacGJ32 分钟前
记录学习--文件读写
java·前端·学习
花间相见44 分钟前
【JAVA开发】—— Nginx服务器
java·开发语言·nginx
扶苏-su1 小时前
Java---Properties 类
java·开发语言
cypking1 小时前
四、CRUD操作指南
java
2301_780669862 小时前
文件字节流输出、文件复制、关闭流的方法
java
剑锋所指,所向披靡!3 小时前
C++之类模版
java·jvm·c++
Coder_Boy_3 小时前
基于SpringAI的在线考试系统-0到1全流程研发:DDD、TDD与CICD协同实践
java·人工智能·spring boot·架构·ddd·tdd
sheji34163 小时前
【开题答辩全过程】以 面向高校校园的物物交换系统设计与实现为例,包含答辩的问题和答案
java·eclipse
卓怡学长4 小时前
m115乐购游戏商城系统
java·前端·数据库·spring boot·spring·游戏