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

git开发基础流程

背景

简单场景描述:
有一个git仓库,将master作为主分支,主管基于master分支在页面上新建了两个分支dev1和dev2,有两个同事分别基于这两个分支进行开发。如果你是其中一个同事,需要基于dev1分支开发,那么你的具体操作是什么样的呢?

基于分支开发的简单流程

核心原则:区分“同步”和“整理”

  • git fetch:这是一个“同步”操作。它的成本很低,只是从远程仓库下载最新的分支和提交信息到你的本地仓库,不会修改你的任何工作文件。你应该频繁地执行这个操作,以便了解远程的最新进展。
  • git rebase -i:这是一个“整理”操作。它会重写你的本地提交历史,是一个重量级操作。你不需要每次都做,只在特定时机进行。

正确的日常开发循环流程

下图清晰地展示了何时进行简单的同步 (fetch),以及何时需要进行完整的变基整理 (rebase -i):

flowchart TDA[开始新一天的工作<br>或开始一个新功能模块] --> B[【高频操作】<br>git fetch origin master]B --> C{我的分支功能完成<br>且准备推送到远程?}C -- 否 --> D[进行本地开发<br>(多次add/commit)]D --> BC -- 是 --> E[【关键操作】<br>git rebase -i origin/master]E --> F[解决可能出现的冲突<br>git add . && git rebase --continue]F --> G[强制推送到远程<br>git push --force-with-lease]G --> H[创建Pull Request]

详细步骤说明

第1步:开始工作前,先同步信息(高频操作)

# 确保你在自己的开发分支上
git switch dev1# 获取远程最新信息(这只是一个下载动作,非常安全)
git fetch origin master

目的:让本地仓库知道origin/master(远程主分支)现在已经进展到哪里了。这时你本地dev1分支的代码还完全没变,但你心里有数了。

第2步:进行开发工作

# ...编写你的代码...
git add <文件>
git commit -m "feat: 完成了某个功能点"
# ...可以多次提交...

这是开发的主体部分。你专注于编码和提交,不需要被复杂的Git操作打断。

第3步:决定推送前,进行整理和变基(关键操作)
当你觉得一个功能模块完成、一天工作结束、或者准备发起Pull Request时,就是进行整理的最佳时机。

# 1. 再次同步,确保你基于的是最新的master(这步不能省!)
git fetch origin master# 2. 执行交互式变基,整理提交历史
git rebase -i origin/master

为什么是这时才做?

  • 你将所有小的、琐碎的提交压缩成1个或几个有意义的提交。
  • 你确保你的功能是基于项目最新的代码进行开发的,这能极大减少未来合并时的冲突。
  • 你只需要在最后解决一次可能出现的冲突,而不是在开发过程中反复解决。

第4步:推送到远程
由于rebase改写了历史,需要强制推送:

git push --force-with-lease origin dev1

一个具体的场景示例

假设同事1在8月24日的工作流程:

  1. 早上9:00

    git switch dev1
    git fetch origin master # 发现master自从昨天后没有新提交
    # 开始 coding...
    git commit -m "feat: 添加登录接口"
    git commit -m "fix: 修正登录参数验证的bug"
    
  2. 上午11:00

    git fetch origin master # 发现同事2刚刚合并了一个重要功能到master
    # 你评估了一下,这个新功能不影响你当前的工作,决定继续开发,暂不rebase。
    git commit -m "feat: 添加记住登录状态功能"
    
  3. 下午5:00,功能开发完毕,准备推送代码。

    # 最后同步一次!
    git fetch origin master# 开始整理!将今天的3个提交整合成1个清晰的提交。
    git rebase -i origin/master
    # 在交互界面将后两个提交标记为'squash'# 解决可能出现的冲突(因为11点后master有更新)
    # 写入新的提交信息:"feat: 实现用户登录功能"# 推送到远程,发起PR
    git push --force-with-lease origin dev1
    

总结

  • git fetch频繁使用(一天数次)。这是一个安全的“查看”操作,让你保持信息同步。
  • git rebase -i仅在关键时刻使用(一天一次,或一个功能完成时)。这是一个“整理”操作,目的是在提交前创造出清晰、线性的历史。

所以你最初的理解——“每次开发前都做”——是不必要的。正确的模式是:频繁fetch获取信息,在推送前进行一次rebase整理。这样既保证了代码的时效性,又不会打扰你的开发节奏。

http://www.xdnf.cn/news/18904.html

相关文章:

  • Springboot应用如何与SkyWalking集成,并使用Docker进行发布
  • Python爬虫实战:研究amazon-scrapy,构建亚马逊电商数据采集和分析系统
  • 扣子智能体商业化卡在哪?井云系统自动化交易+私域管理,闭环成交全流程拆解
  • 小程序开发指南(四)(UI 框架整合)
  • 机器视觉的3C玻璃盖板丝印应用
  • three.js+WebGL踩坑经验合集(8.3):合理设置camera.near和camera.far缓解实际场景中的z-fighting叠面问题
  • 如何在IDEA中使用Git
  • MyBatis-Plus 快速入门 -常用注解
  • 使用阿里云实现短信注册
  • SAVITECH盛微先进SAVIAUDIO音频解码芯片方案与应用
  • ValueTask 实战指南:解锁 .NET 异步编程的性能秘密
  • window显示驱动开发—混合系统 DDI 和 dList DLL 支持
  • 【P2P】P2P主要技术及RELAY服务实现
  • mac设置鼠标滚轮方向
  • 让清洁更智能,让城市更美好
  • 20、DMA----释放CPU压力,加快传输
  • 无人机航拍数据集|第30期 无人机腰果成熟度目标检测YOLO数据集3098张yolov11/yolov8/yolov5可训练
  • Day8--HOT100--160. 相交链表,206. 反转链表,234. 回文链表,876. 链表的中间结点
  • 艾利特石油管道巡检机器人:工业安全的智能守护者
  • 高通平台wifi--p2p issue
  • leetcode 17.04 消失的数字
  • 理解Vuex的辅助函数,分析mapState、mapGetters、mapMutations和mapActions各个应用场景
  • SQL 语句拼接在 C 语言中的实现与安全性分析
  • 大模型应用实战:构建企业知识库 RAG 系统(含权限控制 + 多轮对话)
  • 无线USB转换器TOS-WLink网盘更新--TOS-WLink使用帮助V1.0.pdf
  • 【C++游记】List的使用和模拟实现
  • 矩阵系统源代码开发,支持OEM贴牌
  • 5G与6G技术演进与创新对比分析
  • 我们为你连接网络,安装驱动程序
  • 车载诊断架构 --- DTC Event与DTC Status的对应关系