当前位置: 首页 > news >正文

Git分支管理完全指南:从创建到合并与冲突解决

目录

1. Git分支基础概念

主分支与子分支

2. 分支查看与切换

查看当前分支

3. 分支创建与管理

本地分支操作

4. 文件提交与分支关系

5. 分支合并策略

本地有分支的情况

本地没有远程分支的情况

6. 分支冲突解决

解决方案

7. Git Stash:临时保存工作现场

8. 最佳实践建议


1. Git分支基础概念

在Git版本控制系统中,分支是开发过程中不可或缺的部分,它允许开发者在不影响主代码的情况下进行功能开发或问题修复。

主分支与子分支

  • ​master分支​​:主分支,通常代表项目的稳定版本
  • ​子分支​​:从主分支或其他分支派生出来的分支,用于特定功能开发或问题修复

2. 分支查看与切换

查看当前分支

# 查看当前所在分支(HEAD指向当前分支)
git log# 另一种查看当前分支的方法
cat .git/HEAD# 查看所有分支
git branch# 查看包括远程分支在内的所有分支
git branch -a

3. 分支创建与管理

本地分支操作

# 创建并切换到新分支
git checkout -b 分支名# 仅创建分支
git branch 分支名# 切换分支
git checkout 分支名# 切换到最近使用的分支
git checkout -# 删除分支(-D强制删除)
git branch -d 分支名

​注意事项​​:

  • 不能删除当前所在的分支
  • 不能删除未合并或已发生变化的分支
  • 创建分支时,子分支会包含主分支当前的所有内容

4. 文件提交与分支关系

文件在不同分支间的可见性规则:

  1. ​未提交的修改​​:所有分支都能看到状态(假象)
  2. ​已提交到特定分支​​:仅在提交的分支上可见
  3. ​暂存区(add)但未提交​​:所有分支都能看到状态
# 将文件添加到暂存区
git add .# 提交到本地仓库
git commit -m '注释'# 推送到远程主分支
git push# 推送到特定远程分支
git push origin 分支名

5. 分支合并策略

本地有分支的情况

# 切换到主分支
git checkout master# 合并指定分支到当前分支
git merge 分支名# 推送到远程仓库
git push

本地没有远程分支的情况

# 拉取远程分支信息
git pull# 在master分支下拉取特定远程分支
git pull origin 分支名# 常规拉取
git pull# 推送主分支
git push origin master

6. 分支冲突解决

当多个分支修改同一文件的不同部分时,合并会产生冲突。

​典型场景​​:

  • dev1修改文件并提交
  • dev2修改同一文件的不同部分并提交
  • 尝试合并这两个分支时出现冲突

解决方案

  1. ​在正确分支上合并并修改​

    • 合并后手动解决冲突(保留正确内容,删除错误内容)
    • 提交修改
    • 删除无用的冲突分支(因其内容已不正确)
  2. ​在错误分支上合并并修改​

    • 合并后手动解决冲突(保留另一分支的正确内容)
    • 提交修改
    • 此时两分支内容将一致

​可视化冲突日志​​:

git log --graph

7. Git Stash:临时保存工作现场

当需要切换分支但当前修改尚未完成时,可以使用stash功能临时保存工作进度。

# 将当前修改存入堆栈
git stash# 包含未跟踪文件
git stash -u# 查看堆栈中的保存项
git stash list# 恢复最近的stash并删除堆栈记录
git stash pop

​特点​​:

  • 使用stash后,git status看不到修改状态
  • 修改内容暂时不可见
  • 可在适当分支上恢复stash内容

8. 最佳实践建议

  1. ​分支命名​​:使用有意义的名称,如feature/login、bugfix/navbar等
  2. ​频繁合并​​:定期将主分支变更合并到开发分支,减少冲突
  3. ​小步提交​​:小而频繁的提交更容易管理和解决冲突
  4. ​清理分支​​:合并后及时删除不再需要的分支
  5. ​使用pull request​​:在团队协作中,通过PR进行代码审查后再合并
http://www.lryc.cn/news/590062.html

相关文章:

  • 关于redis各种类型在不同场景下的使用
  • 基于 Python/PHP/Node.js 的淘宝 API 商品数据抓取开发教程
  • django安装、跨域、缓存、令牌、路由、中间件等配置
  • .env文件的配置
  • 搭建云途YTM32B1MD1芯片VSCODE+GCC + Nijia + Cmake+Jlink开发环境
  • python的慈善捐赠平台管理信息系统
  • 将URL地址最后一段中文内容进行URL编码
  • Harmony-Next鸿蒙实战开发项目-仿小米商城App----V2
  • 【18】MFC入门到精通——MFC(VS2019)+ OpenCV 显示图片的3种方法
  • Kotlin集合聚合
  • Maple2025 软件安装教程(Win版)
  • nerdctl - 兼容 Docker 语法 的 containerd 命令行界面
  • Egg.js × NestJS 2025 Nodejs后端框架选型指南
  • 交易日历接口api,股票/板块日,周,月K线行情接口api,情绪周期api,Level2实时数据api
  • java 知识点表格
  • 数据结构:栈(区间问题)
  • 颠覆NLP十年范式!OpenCSG中文数据集助推CMU无分词器模型登顶SOTA
  • Kubernetes使用kubeadm安装详细步骤
  • Java基础:分支/循环/数组
  • Django基础(三)———模板
  • OpenSearch SQL 查询完整指南
  • django在线音乐数据采集-22647
  • 职业发展:把工作“玩”成一场“自我升级”的游戏
  • OpenCV直线段检测算法类cv::line_descriptor::LSDDetector
  • WPF 导入自定义字体并实现按钮悬停高亮效果
  • 红黑树、B树、B+树
  • 计算机网络:(九)网络层(下)超详细讲解互联网的路由选择协议、IPV6与IP多播
  • 汽车数字化——65页大型汽车集团企业IT信息化(管理架构、应用架构、技术架构)战略规划【附全文阅读】
  • 怎么用快鲸aiseo提升百度搜索排名?
  • 如何区分Bug是前端问题还是后端问题?