AICon 深圳站聚焦 Agent 技术、应用与生态,大咖分享实战干货 了解详情
写点什么

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

评论 1 条评论

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

Transformer:让ChatGPT站在肩膀上的巨人?

Baihai IDP

AI Transformer

GBase 8s安装

@下一站

国产数据库 12月日更 12月月更 Gbase8s

React Streaming SSR 原理解析

字节跳动终端技术

React

优化 20% 资源成本,新东方的 Serverless 实践之路

阿里巴巴云原生

阿里云 Serverless 云原生

一文读懂于Zebec生态中的潜在收益方式

股市老人

【深入浅出Spring原理及实战】「源码原理实战」从底层角度去分析研究PropertySourcesPlaceholderConfigurer的原理及实战注入机制

码界西柚

spring 12月日更 12 月 PK 榜 Spring 配置解析

Colossal-AI助力,摩尔线程预训练语言模型MusaBert荣登CLUE榜单TOP10

科技热闻

华为时习知,让企业培训更简单!

科技怪授

华为

2022年中国汽车智能网联云服务分析

易观分析

5G 汽车 智联网

React源码分析6-hooks源码

flyzz177

React

正向拆解mlops

mlops

MLOps

互联网医疗领域月度观察——二十大报告明确提出健康中国建设目标,互联网医疗是建设重点

易观分析

互联网医疗

信用卡应用评测系列——阳光惠生活APP7.0打造“世界波”专区

易观分析

金融 银行 信用卡

react hook 源码完全解读

flyzz177

React

在霍格沃兹测试开发学社学习是种怎样的体验?

测吧(北京)科技有限公司

测试

HTTP协议基础知识

穿过生命散发芬芳

HTTP 12月月更

Osx10.14升级watchman踩坑记

Geek_pwdeic

macos homebrew

React源码分析5-commit

flyzz177

React

数据治理体系建设与数据资产路线图规划

用友BIP

WhaleDI数据治理利器之“低成本数据质量管理”

鲸品堂

12 月 PK 榜

商密SIG月度动态:文件加密支持SM4算法、Anolis 8.8将默认集成 | 龙蜥 SIG

OpenAnolis小助手

开源 算法 龙蜥社区 商密 SM4

自动化测试技术笔记(一):前期调研怎么做

老张

自动化测试

Verilog语言的循环语句

芯动大师

Verilog Verilog语法 Verilog循环

React源码分析7-state计算流程和优先级

flyzz177

React

「Go框架」路由:web框架中是如何根据url地址找到对应的处理逻辑的?

Go学堂

golang 个人成长 程序员‘ 12月月更

React源码解读之更新的创建

flyzz177

如何提升工作效率--工具篇(60/100)

hackstoic

工具 工作效率

flutter系列之:移动端手势的具体使用

程序那些事

flutter 大前端 程序那些事

2022-12-19:大的国家。如果一个国家满足下述两个条件之一,则认为该国是 大国 : 面积至少为 300 万平方公里(即,3000000 km2),或者 人口至少为 2500 万(即 250000

福大大架构师每日一题

数据库 福大大

react源码中的fiber架构

flyzz177

React

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