写点什么

用 Git 解决 5 个开发常见问题

  • 2019-02-01
  • 本文字数:1968 字

    阅读完需:约 6 分钟

用Git解决5个开发常见问题

Git 是目前最流行的版本控制系统,GitHub 和 GitLab 是当前最流行的代码托管平台,熟练掌握 Git,可以说是程序员的必备技能。用 Git 可以解决很多问题,我整理了大家普遍关切的 5 个问题,并附上使用场景和解决思路,希望这样的方式可以让大家对 Git 有更进一步的认识,更好地掌握 Git、GitHub 和 GitLab。

1、怎么修改版本树的历史?

使用场景:在快节奏的开发过程中,为了及时保存某项开发成果,开发人员往往会通过创建一个 commit 的方式,把变更集正式保存下来,再继续后面的开发。过了一段时间,当开发人员回头审视代码的版本树,通常会发现有些 commit 需要重新修改,诸如 “commit 的说明内容有误”、“commit 涉及的功能被砍掉,需 删掉这些 commit” 和 “几个 commit 合并成 1 个后,才能完整地代表同一个功能” 等情况。


解决思路:上述的场景都反映出:开发人员对于曾经的阶段性变更(commit)有重新修改的需求,希望通过修改,可以把每个 commit 变得更有条理性、表述更准确和更易维护。我们可以借助 Git 交互式变基(git rebase -i )来修改代码版本的历史。


视频详解:怎么修改最新commit的message?

2、开发到一半被告知须立即修复线上 Bug,怎么办?

使用场景:开发人员正在为 A 项目的新功能敲着代码的时候,QA 过来通知线上发现重大 Bug,须开发人员立刻修复。这位开发人员如何快速地把 A 功能开发到一半的代码保存起来,然后切换到线上版本对应的分支解决 Bug 呢?


解决思路:开发到一半的代码,开发人员还不想通过 commit 的方式保存变更,但又想快速地把当前的工作进度保存起来,等修复完 Bug 后再调用出来。我们可以借助 Git Stash 的方式,分别对暂存区和工作区的状态进行保存。


视频讲解:开发中临时加塞了紧急任务怎么处理?

3、如何排除 Git 仓库里没必要的文件?

使用场景:IT 研发项目中,通常存在部分文件,在某些时刻它们会出现在项目的路径中,但又不能把它们存放到 Git 代码仓库中。比如,有些应用的配置文件(里面含有访问数据库的账号信息);还有一些编译后产生的二进制文件,它们由源代码就可以再次创建出来,因此没必要纳入 Git 进行版本管理。就不同的开发语言,开发团队如何快速识别不用 Git 管控的文件,并让 Git 不再理会这些文件呢?


解决思路:在项目开始就把不用 Git 管理的文件配置到 .gitignore 文件中,Git 就不会理会这些文件了。而不同的开发语言该如何配置 .gitignore ,我们可以借鉴 GitHub 的做法。


视频详解:如何指定不需要 Git 管理的文件?

4、分支集成的时候,怎么让主干分支保持 linear 的历史?

使用场景:有些团队为了后期定位问题更加高效,特性分支合入到主干分支的时候,主干分支只会创建出只有 1 个 parent 的 commit,而不会生成有两个 parents 的 commit。一旦特性分支的变更合入到主干分支后,就可以把特性分支及其只属于该分支的 commit 删除掉。这么做的好处:整个项目主干分支的版本历史永远呈一条清晰的、无分叉的线;分支演变的历史很清晰,查看历史不易出错;用 revert 做代码回滚比较容易;用 bisect 查找哪个 commit 引入了问题,只需在主干分支上查找即可,因此效率较高。


解决思路:想要让主干分支保持 linear 线性的历史,我们不妨看看 GitHub 提供的集成策略,Merge Button 不要选择 “Allow merge commits”,而应该选择 “Allow squash merging” 或者 “Allow rebase merging”。除此之外,大家还可以注意一下 GitLab 的 Merge method,看看 “Fast-forward merge ” 是否也能帮我们创建 linear 的历史。


视频详解:团队协作时如何做多分支的集成?

5、基于主干分支做 rebase 的时候,怎么省掉处理文件冲突的重复性的工作?

使用场景:某个时间点从主干分支创建出了特性分支,当这条特性分支想合回主干分支的时候,主干分支已经向前新增了 commit。为了让特性分支顺利合回主干,开发人员通常在开发本地,把自己维护的特性分支基于主干分支做 rebase。如果特性分支有多个 commit 需要做 rebase,有时候要求开发人员反复解决相同的文件冲突,这些活干起来不仅麻烦还没有什么价值。


解决思路: 我们可以借助 Rerere 这个 Git 工具,Rerere 是指“reuse recorded resolution” ,它允许我们让 Git 记住解决一个块冲突的方法,这样在下一次遇到相同冲突时,Git 可以为我们自动地解决它。


视频详解:团队协作时如何做多分支的集成?

作者寄语:

学好 Git、GitHub 和 GitLab 三剑客,仿佛乘上了安全且高速的列车,可以让团队更高效地完成研发任务,也可以让个人更顺利地参与协作,何乐而不为呢?


我在这门课里,不光讲简单的 Git 命令使用,还会讲更多 Git 原理性方面的内容,以及 GitHub 和 GitLab。知其然更知其所以然,怎么用这些做代码 review ,做项目管理,怎么去做持续集成,这些都是更高维度的东西,而不仅仅是去学几个工具。


点击试看或订阅《玩转 Git 三剑客》


2019-02-01 14:036196

评论 1 条评论

发布
用户头像
有bug了明显应该做hotfixes吧,而不是stash
2019-02-02 13:41
回复
没有更多了
发现更多内容

BOE(京东方)携多领域商显解决方案亮相InfoComm Asia 2025 “科技+绿色”引领万物互联新时代

爱极客侠

JNPF组织权限,让企业权限体系更清晰高效​

引迈信息

快手DHPS:国内首个实现基于RDMA 通信的可负载均衡高性能服务架构!

快手技术

高性能 服务架构 快手 RDMA技术

亚太企业AI应用现状---- 理想丰满、现实骨感

财见

唯一中资厂商!腾讯云连续三年入选 Gartner® CPaaS 魔力象限“挑战者”,AI 实践与国际化布局成效显著

极客天地

Playwright | ​​调试神器实战:Trace Viewer 录屏分析 + AI 辅助定位修复​

测试人

MyEMS能源管理系统后台配置-设备管理

开源能源管理系统

开源 能源管理系统

6 款支持角色权限控制(RBAC)的开发工具对比与应用场景解析

NocoBase

开源 权限管理 rbac 身份管理 角色管理

开源鸿蒙走进地方开源生态建设交流会:政企办公应用落地牵引开源创新

最新动态

代码智能化在互联网大厂的规模化落地实践

思码逸研发效能

人工智能 研发效能 智能代码 研发效能管理 AI 编程

Promtail 对接日志最佳实践

观测云

日志分析

李沐团队开源音频模型 Higgs Audio V2,基于千万小时数据训练;生数科技发布长时文生音频系统 FreeAudio丨日报

声网

Playwright | 异步加载克星:自动等待vs智能等待策略深度解析​

测试人

NineData新增SQL Server到MySQL复制链路,高效助力异构数据库迁移

NineData

MySQL 数据库迁移 数据复制 NineData SQL Server

云服务卓越架构能力成熟度模型标准发布,腾讯云顾问率先落地

科技热闻

观安信息新一代政务数据共享交换平台

极客天地

2025年远程桌面软件深度评测:ToDesk、向日葵、TeamViewer全方位对比分析

小喵子

远程办公 向日葵 ToDesk TeamViewer

多语种AI舆情监测的关键技术与挑战

沃观Wovision

NLP 大模型 海外舆情 AI 大模型 沃观Wovision 舆情监测系统

BOE(京东方)携手生态伙伴推出公益微电影 见证“照亮成长路”十年科技赋能教育之路

爱极客侠

《开源鸿蒙共建地图4.0》发布 加速构建面向万物互联的操作系统能力

最新动态

MyEMS能源管理系统后台配置-组合设备管理

开源能源管理系统

开源 能源管理系统

客户为纲,万目皆张——中烟创新致烟草客户的一封信

中烟创新

拯救重复劳动:无代码实现 Markdown 图&表抽取

数由科技

人工智能 markdown 数据科学 ETL 无代码

抖音集团基于Flink的亿级RPS实时计算优化实践

Apache Flink

大数据 flink 实时计算 实时处理

bsfgo 一个轻量级的go web框架

车江毅

90%企业误解的低代码真相,已经不单纯了

秃头小帅oi

焱融科技携手信通院、青云科技启动“AI推理高性能存储技术推进计划”

焱融科技

人工智能 大模型推理 焱融存储 KVCache

腾讯云通过信通院云计算系统智能化可观测性能力最高等级认证

科技热闻

深度拆解UI智能设计:如何用D2C设计稿转代码,实现产设研一体化

职场工具箱

AI 产品经理 产品设计 ui设计 设计稿转代码

“方寸之间见乾坤:英特尔双卡工作站的空间折叠魔术

科技热闻

MyEMS能源管理系统后台配置-空间管理

开源能源管理系统

开源 能源管理系统

用Git解决5个开发常见问题_开源_苏玲_InfoQ精选文章