百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

优秀的程序员Git使用指南,我在工作中是这样使用Git

liuian 2025-01-23 18:42 29 浏览

1 絮叨

最近因为工作有点忙,加上自己个人生活的一些琐事,突然感觉写文章太难了,不过还是慢慢坚持下来,即使更新频率变慢了。最近的主题还是那个初衷, 记录下自己日常开发工作的一些想法。

2 前言Git

在日常的开发工作中,免不了会使用git进行代码管理,熟练使用git会使我们有更多的时间专注于代码编写,加快整体开发效率。 然而对我而言,git只是工具,一些常规操作已经足够了,有空有兴趣才会去深入研究它。不熟悉git也不要紧,学学就好, 快的话随便看几个命令后自己再实践一下就可以应付日常开发了。

3 常用Git命令

我日常开发有用idea去操作git,当然有些场景也会在idea的Terminal面板去手打命令,当你熟悉了之后,简直是舒服地飞起,会感觉到看似杂乱无章的各个分支里的代码,在你几个命令操作下管理得井然有序。

3.1 克隆项目 git clone

从远程库拉项目到idea: VCS->Checkout from Version Control->Git,贴上URL后点Clone,idea就会帮我们执行git clone命令。

当然,也可以先git clone
https://gitee.com/xxx/Test.git到本地后,在把项目导入idea中

3.2 查看分支 git branch

查看当前项目有哪些分支

3.3 检出代码 git checkout

拉取远程分支代码

git checkout -b dev(本地分支名称) origin/dev(远程分支名称)

3.4 创建分支 git checkout -b

有时你想自己创建一条分支可执行 git checkout -b dev(分支名)

相当于2条命令

git branch dev

git checkout dev

切记,一定要在最新master分支上创建新分支

3.5 拉取/提交/推送代码 git pull/git commit/git push

这几个操作真的是最基本了,相信在所有命令中,熟悉这个的人占极大多数,这里我一般都是借助idea操作的。

如果是多人在同一分支开发的话,一般在push之前要先pull最新代码,但谁要能保证你即使pull后在到push这一瞬间,有没有人提交代码呢?

  1. 若别人有提交代码,idea会在你push时提示你要不要merge,若没有冲突会自动合并,此时git日志里会有这么一行记录 Merge remote-tracking branch 'origin/dev' into dev git的日志记录也不会是一条完整直线了。若有冲突,需要手动解决。
  2. 若你先pull,没冲突当然最好,有冲突你会pull失败,提示本地修改会被覆盖。 这时可以git stash 暂存修改。 暂存成功后 git pull拉取代码。 git unstash将暂存的代码更新到当前分支上。


如果此时有冲突,可手动解决,idea也提供良好的可视化图形,解决冲突变得容易许多。

左边本地代码、右边远程代码、中间合并成功之后的代码

3.6 撤销操作

  1. 还没commit就想放弃修改,直接鼠标右键点击文件Revert就好。
  2. commit了之后还没push,想撤回commint前操作。 git reset --hard HEAD~ --hard直接还原到上一版本,不保留修改(慎用) git reset --soft HEAD~ --soft还原到上一版本,保留commit前的修改(常用) git reset --mixed HEAD~ --mixed 与soft不同的是,还原到git add前没暂存的文件 图形化 GIt->Repository->Reset HEAD...

HEAD~上一版本

一般都后悔操作上一步,想回退多步直接指定版本号吧 git reset --hard HEAD commit_id

  1. push之后想回退。 依然可以用上述操作,只不过在下一次push之后,会拿回退前的版本跟当前修改合并,有冲突要解决。

3.7 合并代码 git merge

这里我一般都是图形化操作,将远程代码合并到自己当前的分支上。

merge dev(分支名) into current

4 多人开发合作模式

所谓的开发合作模式,简单来说就是git的分支管理。

每个公司因为业务量不同、服务器数量不同,都有自己的管理规范。

简单点的可能只有主干master、开发分支dev。

复杂点的多了功能分支feature、bug修改分支fixbug,甚至还有测试分支test、预发布分支pre-release。

当然,这些不同场景的叫法和命名都是自己定义的,但你的项目再简单,最好不要简化到只有master和dev分支。

我曾入职一家公司,看到里面的项目只有master和dev,就直接跟当时的开发说你们这样干,不会遇到某某问题吗?没想到 一语中的,所以后面才规范了分支管理规范。

那会有什么问题?

  • master是线上稳定的代码分支,一般不能直接在上面修改,这时产品来了2个或以上需求,因进度不同不能同时上线, 这时你们共用一个dev,那岂不是把别人未测试过的代码给上了?你可能会说我们公司需求不多,上线一个功能才开发下一功能,那自己私下想写些demo测试优化,还不是要在dev上改?
  • 2个功能需求想一起测试、一起上线,那我都在dev开发?最好还是分开,各自建自己的分支开发,避免其他同事在解决冲突时因不熟悉git把你的代码给干掉了。后面想一起上线时再一起合并即可。

目前自己在用的管理模式,master+多个feature分支,仅此而已:

  1. 需求下来,在master上建个功能分支,命名f+时间+功能名,如:f_20200521_coupon(暂且定义A)。
  2. 本地开发、服务器上测试都直接部署功能分支的代码。
  3. 测试通过即将上线时,checkout本地的master,git pull拉最新代码。
  4. 再切换回自己的功能分支A,并merge matser into current,手动解冲突。
  5. 如果想连同他人的分支(暂且定义B)一起上线,最好先叫你的伙伴先合master代码,然后重复3、4步,checkout B、切换A、merge B。
  6. 在gitlab等私服申请请求合并,merge A into matser,这时绝对不会有冲突产生。
  7. 合并到master后删除自己的功能分支。
  8. 服务器上部署master上线。

为什么有第3步?其实是为了第4、第6步服务的,得先保证你本地的matser是线上最新的,经过第4步之后去到第6步,因为master是最新且在第4步已解决冲突,到了第6步就绝对不会有冲突。

为什么不直接在第3步后就 merge A into current(master)?为了安全,master一般不能在本地直接操作,是一个受保护的分支。

为什么在第4步merge matser into A后还要在第6步merge A into matser,绕来绕去,在逗我吗?上面已经回答了,master分支一般是有权限(受保护)的,merge A into matser不能在本地操作,只能在gitlab(git私服)上操作,但gitlab上又不能手动解决冲突,所以我们要先在本地merge matser into A并手动解决冲突,再到第6步就可以完美合并。

是不是被我绕晕了......???

另外,遇到线上bug得紧急修复,也能建个功能分支,然后按上述方法操作。

如果只是改的线上的极小功能(文案,简单判断之类的)又想快速上线,而且你还有操作matser的权限,那大可不必按上述方式,直接master上改后提交就行,多爽是吧。

5 建议

【建议1】一定要在最新的master上新建分支,不然后面上线时会上了别人未测试的代码。

【建议2】做好一个功能点就提交代码,避免意外事件导致代码丢失。和别人一起在同一分支开发时,尽早提交可以不用解决冲突, 把这事留给别人哈哈哈。

【建议3】解决冲突时如果不确定会不会处理不当,最好拉上之前写这段代码的同事一起看。

【建议4】上线合并到master后最好开发群通知一下,让其他开发同事尽早拉最新master代码合到自己的分支。

【建议5】跟建议4关联,开发周期较长,应及时将线上最新master合到当前正在开发的分支,避免最后上线前花时间解决大量冲突,同时尽早避免自己依赖的上游业务被修改而引发新的异常发生。

【建议6】不定期的code review。

【建议7】......................

6 总结

本文介绍了自己平时常用的git命令和一些常规操作、分支管理模式、项目上线规范、日常开发的建议等等,偏向基础,太难也写不出,只是记录自己平时的工作和一些想法。

作为一个git的新手,甚至还不知道git是什么,没什么大不了的,现在学学就好。

但如果你同时是一个开发团队的leader,还没有很好的git管理规范的话,那确实得认认真真去学一下了。


作者:悟空GoKu
链接:
https://juejin.im/post/5ec7859ae51d45788f0d6cd1

相关推荐

教你把多个视频合并成一个视频的方法

一.情况介绍当你有一个m3u8文件和一个目录,目录中有连续的视频片段,这些片段可以连成一段完整的视频。m3u8文件打开后像这样:m3u8文件,可以理解为播放列表,里面是播放视频片段的顺序。视频片段像这...

零代码编程:用kimichat合并一个文件夹下的多个文件

一个文件夹里面有很多个srt字幕文件,如何借助kimichat来自动批量合并呢?在kimichat对话框中输入提示词:你是一个Python编程专家,完成如下的编程任务:这个文件夹:D:\downloa...

Java APT_java APT 生成代码

JavaAPT(AnnotationProcessingTool)是一种在Java编译阶段处理注解的工具。APT会在编译阶段扫描源代码中的注解,并根据这些注解生成代码、资源文件或其他输出,...

Unit Runtime:一键运行 AI 生成的代码,或许将成为你的复制 + 粘贴神器

在我们构建了UnitMesh架构之后,以及对应的demo之后,便着手于实现UnitMesh架构。于是,我们就继续开始UnitRuntime,以用于直接运行AI生成的代码。PS:...

挣脱臃肿的枷锁:为什么说Vert.x是Java开发者手中的一柄利剑?

如果你是一名Java开发者,那么你的职业生涯几乎无法避开Spring。它如同一位德高望重的老国王,统治着企业级应用开发的大片疆土。SpringBoot的约定大于配置、SpringCloud的微服务...

五年后,谷歌还在全力以赴发展 Kotlin

作者|FredericLardinois译者|Sambodhi策划|Tina自2017年谷歌I/O全球开发者大会上,谷歌首次宣布将Kotlin(JetBrains开发的Ja...

kotlin和java开发哪个好,优缺点对比

Kotlin和Java都是常见的编程语言,它们有各自的优缺点。Kotlin的优点:简洁:Kotlin程序相对于Java程序更简洁,可以减少代码量。安全:Kotlin在类型系统和空值安全...

移动端架构模式全景解析:从MVC到MVVM,如何选择最佳设计方案?

掌握不同架构模式的精髓,是构建可维护、可测试且高效移动应用的关键。在移动应用开发中,选择合适的软件架构模式对项目的可维护性、可测试性和团队协作效率至关重要。随着应用复杂度的增加,一个良好的架构能够帮助...

颜值非常高的XShell替代工具Termora,不一样的使用体验!

Termora是一款面向开发者和运维人员的跨平台SSH终端与文件管理工具,支持Windows、macOS及Linux系统,通过一体化界面简化远程服务器管理流程。其核心定位是解决多平台环境下远程连接、文...

预处理的底层原理和预处理编译运行异常的解决方案

若文章对您有帮助,欢迎关注程序员小迷。助您在编程路上越走越好![Mac-10.7.1LionIntel-based]Q:预处理到底干了什么事情?A:预处理,顾名思义,预先做的处理。源代码中...

为“架构”再建个模:如何用代码描述软件架构?

在架构治理平台ArchGuard中,为了实现对架构的治理,我们需要代码+模型描述所要处理的内容和数据。所以,在ArchGuard中,我们有了代码的模型、依赖的模型、变更的模型等,剩下的两个...

深度解析:Google Gemma 3n —— 移动优先的轻量多模态大模型

2025年6月,Google正式发布了Gemma3n,这是一款能够在2GB内存环境下运行的轻量级多模态大模型。它延续了Gemma家族的开源基因,同时在架构设计上大幅优化,目标是让...

比分网开发技术栈与功能详解_比分网有哪些

一、核心功能模块一个基本的比分网通常包含以下模块:首页/总览实时比分看板:滚动展示所有正在进行的比赛,包含比分、比赛时间、红黄牌等关键信息。热门赛事/焦点战:突出显示重要的、关注度高的比赛。赛事导航...

设计模式之-生成器_一键生成设计

一、【概念定义】——“分步构建复杂对象,隐藏创建细节”生成器模式(BuilderPattern):一种“分步构建型”创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建...

构建第一个 Kotlin Android 应用_kotlin简介

第一步:安装AndroidStudio(推荐IDE)AndroidStudio是官方推荐的Android开发集成开发环境(IDE),内置对Kotlin的完整支持。1.下载And...