来QCon北京,现场感受“纯血鸿蒙”的魅力!席位有限,抓紧报名 了解详情
写点什么

用 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:035875

评论 1 条评论

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

flutter页面跳转数据,直面春招

android 程序员 移动开发

fluttertextfield光标,想跳槽涨薪的必看

android 程序员 移动开发

flutter跳转原生,零基础也能看得懂

android 程序员 移动开发

netty系列之:使用netty实现支持http2的服务器

程序那些事

Java Netty 程序那些事 响应式系统

kotlin实现接口,已开源下载

android 程序员 移动开发

flutter下拉刷新背景,学Android看这就完事了

android 程序员 移动开发

GTLC 全球技术领导力峰会 | 渐进式的研发管理改进之路

万事ONES

研发管理 研发效能 ONES

没有一个行业能比房地产中介更需要CRM

低代码小观

企业管理 房地产业 管理系统 企业管理系统 行业管理系统

flutter瀑布流组件,腾讯T3面试官透露

android 程序员 移动开发

QCon 全球软件开发大会 | 大型团队研发效率持续改进实践

万事ONES

研发管理 研发效能 ONES

深圳企业办理等保业务,应该怎么办理?选择哪款堡垒机好?

行云管家

网络安全 等保 等级保护 等保测评

html5移动开发即学即用网盘,面经解析

android 程序员 移动开发

kotlinui库,字节跳动内部学习资料泄露

android 程序员 移动开发

kotlin入门教程百度网盘,阿里开发7年大牛

android 程序员 移动开发

kotlin协程实现原理,【绝对干货】

android 程序员 移动开发

BAT这种大厂履历意味着什么,字节跳动资深面试官亲述

android 程序员 移动开发

另一只眼看软件研发效能提升,软件研发效能的“人性”与“物性”

博文视点Broadview

flutter教程gitbook,走进Android架构

android 程序员 移动开发

flutter调试技巧,惊喜

android 程序员 移动开发

html5移动开发即学即用网盘,差点无缘Offer

android 程序员 移动开发

flutter中文教程,程序员必看

android 程序员 移动开发

博文视点“阿里云全系列技术图书”隆重亮相2021云栖大会

博文视点Broadview

推荐电脑手机都能用的youtube视频下载神器,包括苹果手机也能使用

So...

油管视频下载 youtube

浅谈工作量证明对于区块链系统的必要性

CECBC

普通本科毕业一年,刷完这1000道JAVA面试题,成功逆袭上岸

Java 程序员 架构 面试 后端

行云创新马洪喜出席云栖大会,解读云原生时代开发者工具变革探索与实践

行云创新

开发者 云原生 行云 云栖大会 马洪喜

flutterpageview嵌套,阿里P8亲自讲解

android 程序员 移动开发

html5移动端开发2020,跳槽大厂必看

android 程序员 移动开发

game+defi系统开发需求(公司)

Kafka是如何实现高性能的,程序员进阶知识点

android 程序员 移动开发

kotlinalso函数,34岁程序员年薪50w

android 程序员 移动开发

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