git整理commit的基本方法(拆分、合并、修改commit)

Git提交记录合并与rebase操作指南 版本控制是软件开发中的核心实践,Git作为分布式版本控制系统,通过commit记录代码变更历史。在团队协作中,保持提交历史的清晰性至关重要,这涉及到commit的合并与整理技术。Git rebase是一种强大的历史重写工具,它通过重新应用提交来实现commit的合并与重组,相比merge能产生更线性的历史记录。交互式rebase(-i参数)是实际开发中最常用的操作方式,支持squash合并、fixup快速合并以及commit message修改等功能。这项技术特别适用于本地开发阶段整理零散提交,或在GitL 阅读详情
AI摘要

本文介绍如何使用Git对杂乱的commit进行整理,包括利用rebase-i整合和拆分commit、利用stash暂存改动等技巧。并通过实例展示了如何按不同目的重新组织commit。

觉得整理commit还是非常重要的一种技能,看到有人已经很好地整理过了,也搬运到自己的博客中,以备不时之需。本文转载自:Git整理Patch的一些经验。

U-Boot升级到了最后,需要将之前比较杂乱的commit重新整理,有的需要整合,有的需要拆分。在这个过程中深刻的体会到了git的强大和灵活性。这里总结一下大的步骤和中间用到的各种小技巧。

步骤

commandsusage
git checkout –b 新建一个branch来做整理的工作,保持原来的branch作为工作记录
git rebase –i 在新建的branch上,用rebase -i接squash的方法,将所有零碎的commit合成一个
git reset –soft HEAD~1这一步只将object store还原到working_base上。所有需要整理的改动都留在index上,以备下一步做stash
git stash save “stash message”将所有的改动放进stash中

至此,我们有了一个工作的基础,所有杂乱的commit被合成一个,并被放进stash中,以备后面一点点的commit进去。

接下来,最好过一遍所有的改动。记录下每个文件的改动包含了那些内容。以备后一步的按照不同的改动内容来合并commit。

git diff stash

举个简单的例子,假如总共有5个改动的文件a~e,分析它们的改动内容包含了四个不同的目的I~IV,如下所示:

文件a --- 目的I
文件b --- 目的II
文件c --- 目的II, 目的III
文件d --- 目的II, 目的IV
文件e --- 目的III

现在考虑按照不同的目的来组织不同的commit:

commit 1 - 目的I   - 文件a
commit 2 - 目的II  - 文件b,文件c和文件d的一部分
commit 3 - 目的III - 文件c的一部分,文件e
commit 4 - 目的IV  - 文件d的一部分

commit 1

commandsusage
git checkout stash 将stash中的文件a checkout出来,此时改动已放入index,我们可以直接commit
git commit –s完成commit 1

commit 2

commandsusage
git checkout stash .将stash中的所有文件checkout出来。这里不能用git stash pop,因为一旦pop了,stash也就消失了,也就无法进行后续的工作。也不能用git stash apply,因为apply是尝试merge,有时候反而会引起conflict,这不是我们想要的结果
git reset HEAD将所有改动移出index,但保留在working目录中
git add b将b的所有改动放入index
git add -p c以interactive的方式,将c的部分改动放进index
git add -p d同前
git commit -s完成commit 2
git clean -dfx由于工作目录是dirty的,所以这一步用以清空空座目录,与object store保持严格一致,用来进行测试。很容易想到git reset –hard HEAD,但是这个命令不会将add的文件清空,比如这个例子中的文件e,所以用clean -dfx是最彻底的,但运行前请确保目录中没有需要保存而未保存的文件。
git add -p的用法
    * add -p 会逐个显示文件中的每组改动,并询问是否要加入index
        – y : 放入index
        – n : 不要放入index
        – e : 手动编辑需要加入index的部分,常用来拆分一个改动块
            – “+”行,增加
            – “-”行,删除
            – “ “行,保持原样

第三个commit和第二个类似。不赘述。到第四个commit时,只剩下文件d,并且虽说d只有一部分与commit 4的目的相关,但由于d的其他部分在之前的commit已经放入object store了,所以又退化成和第一个commit类似的情况。

错误及补救措施

1. Commit到某个点以后,需要增减。

  • git rebase -i <targetCommit>~1: 对出错的commit,用e来表示需要更改

  • 修改:

这里常用的git命令有
    git checkout stash <file> 增加一个文件
    git diff stash <file> 某个文件需要改动
    git reset HEAD~1 <file> 将某个文件移出这次commit

无论如何,保证最后index中是修改过的正确改动。

  • git rebase –continue: 结束修改。

2. Commit到某个点后,发现前面某个commit需要拆分。

  • git rebase -i <targetCommit>~1: 回到拆分点,用e来表示需要更改
  • git reset –mixed HEAD~1: 将这个targetCommit的改动放回working directory,object store和index都还原成这个commit尚未放入的状态。
  • 拆分进行commit: 将这些改动拆分的进行commit。
  • git rebase –continue : 结束修改。

3. rebase -i遇到conflict。

  • 手动修改: 通常是先改成A,后改成B,此时改成B。也有先加上A,后加上B,这时需要取并集。有时A和B有相同的代码段时,这个代码段会被吃掉,修改的时候需要重新加上。
  • git add <file>: 将修改完的文件放入index。
  • git rebase –continue : 继续rebase。

4. 在git command中的运用。

  • git log <path>: 只显示修改了某个文件commits。
  • git log -p <path> : 同上,并且显示这个文件被修改的内容。commit中其他文件的修改则不被显示。
  • git diff … <path>: 只比较某个文件的改动。
Git交互式变基:合并多个Commit的完整指南与最佳实践 在版本控制系统中,提交历史是项目演进的宝贵记录。Git作为分布式版本控制工具,其核心原理在于通过快照记录代码变更,形成可追溯的版本树。交互式变基(Interactive Rebase)是Git提供的高级功能,它允许开发者重新整理提交历史,通过合并(squash)、修改(reword)等操作优化提交记录。这一技术对于维护清晰、线性的项目历史至关重要,能显著提升代码审查效率和团队协作体验。在实际工程实践中,合并多个零碎的Commit是常见需求,特别是在准备Pull Request或Merge Request时。 阅读详情

相关推荐

Git提交拆分:使用git rebase与reset提升代码历史整洁度

在版本控制系统中,提交(Commit)是记录代码变更的基本单元,其原子性和清晰度直接影响团队协作效率。Git通过其分布式架构和快照机制,允许开发者对提交历史进行重构,其中拆分提交(Splitting a Commit)是一项核心进阶操作。该操作基于交互式变基(git rebase -i)和重置(git reset)等命令,其技术价值在于能将混杂多个逻辑的单一提交,拆分为多个原子性提交,从而提升代码仓库的可读性和可维护性。典型应用场景包括分离不相关的修复、重构大功能提交以及修正提交信息与内容不匹配等问题。本文

weixin_33874713的博客 304

commit分拆多个 git_Git拆分commit提交

如果感觉某一次提交的内容较多,可以将它们拆分为多个提交。首先看一下提交历史记录,代码如下:[Shell] 纯文本查看 复制代码$ git log --oneline代码运行效果截图如下:在e222850提交中,添加了两个文件one.txt和two.txt,下面将这两个文件拆分出来,然后分别进行提交。首先运行如下代码:[Shell] 纯文本查看 复制代码$ git rebase -i b0aa963...

weixin_42511177的博客 3119

Git分支与合并实战:从commit整理到冲突解决的协作指南

在多人协作的软件工程中,版本控制是代码资产安全的基石。Git作为分布式版本控制系统,其核心价值不仅在于文件备份,更在于并行开发与历史管理。通过合理运用分支模型,团队可以隔离功能开发与稳定主线,避免相互覆盖。提交记录是代码演进的审计日志,借助交互式rebase可以压缩凌乱的历史,让每次提交都具备清晰语义。合并与变基的取舍,直接影响协作流畅度,冲突解决则是理解合并原理的关键。当误操作发生时,reflog、reset与cherry-pick提供了可靠的安全网。掌握这些基础但核心的Git操作,能显著提升开发效率与团

weixin_28833069的博客 198

如何将一个commit拆解为多个commit?

4.git reset HEAD^ 重置代码的状态,将头位置改为未提交状态,当前的commit已经全部撤销。该命令是提取出你的git日志,查看并复制你需要拆解的commit的前一个commitID。5.git add one.txt 一个一个的提交文件,一个一个的编辑commit。本文将介绍使用rebase 命令将一个commit拆解为多个commit。3.进入rebase后,把本次提交的commit需要拆解的位置前面的。以上次提交合并后的 代码为基点(起点),重新编辑你的commit。

perry0125的博客 3517

自动化Git修复与提交历史整理:git-absorb实战应用

Git版本控制系统已经成为了现代软件开发中的基础设施,它帮助开发者跟踪和管理代码的变更。git-absorb作为Git的一个扩展工具,旨在提高开发者的生产力,通过自动化合并修复和提交信息,来简化开发工作流。在本章中,我们将深入了解git-absorb的工作原理、设置步骤以及如何在实际项目中应用这一工具,从而实现高效且整洁的代码管理。git-absorb是一个Git命令行工具,其主要功能是对最近的几个提交(通常是一个)进行检查,并自动将这些提交的信息和代码变更应用到上一个提交中。

weixin_35906794的博客 955

有限状态机FSM详解(一)

有限状态机在维基百科中的解释是: 有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。 至于为什么要学FSM,FSM可以把模型的多状态、多状态间的转换条件解耦。可以使维护变得容易,代码也更加具有可读性,也更加艺术。 理解有限状态机首先需要理解整个模型。我们把灯的开关作为示例,...

benjonc的博客 5万+

commit分拆多个 git_git合并多个commit为一个commit

情景1:已经存在了一个commit,下面还会有个commit要提交,下次提完之后我希望看到只有一个commit下次提交代码时执行:git add .git commit --am等待出现窗口,切换为英文状态依次输入shift+冒号q输入q(q即不修改上次的提交名称,如果想修改commit名称,修改后需要wq)后回车即可再git push -f origin xxx即可。情景2:已经提交了两次com...

weixin_30039311的博客 307

计量经济学tempdisagg的python库:年度时序变月度

计量经济学tempdisagg的python库:年度时序变月度

素质云笔记 1526

git 如何重新切分commit

有时候对于已经完成的提交想要重新切分成多个commit。 例如,新建三个文件1 2 3,然后一起提交。 commit e8772b47bbd60c8fbfec2652da6501e5b6442fdc (HEAD -> master) Author: xxx <xx.xx@xx.com> Date: Wed Apr 21 13:24:08 2021 +0800 new file 1 2 3 现在我不像让他们一起提交了,我想单个文件提交。这时候用git reset --

wujianyongw4的博客 853

反制反心理特征的研究

抓牛股

m0_58032574的博客 908

逆变器母线电容选型与均压电阻设计实战指南

本文为逆变器母线电容选型与均压电阻设计提供了实战指南。文章从工程角度出发,详细解析了母线电容耐压值、容值的计算方法,并重点强调了纹波电流热设计的重要性。同时,深入探讨了串联电容均压电阻的设计原则与功率计算,通过5.5kW变频器案例,系统演示了从参数确定到最终选型的完整流程,旨在帮助工程师设计出稳定可靠的逆变器系统。

weixin_29299807的博客 291

我该如何拆分历史记录中的Git提交?

I flubbed up my history and want to do some changes to it. 我摸索了自己的历史,并希望对其进行一些更改。 Problem is, I hav

xfxf996的博客 1007

Docker入门教程:在腾讯云轻量服务器上部署你的第一个容器化应用 (2025)

还在为“在我电脑上明明是好的”而烦恼?本篇Docker入门教程,用通俗易懂的比喻解释镜像、容器的核心概念,并手把手带你在腾讯云轻量服务器上,从运行Nginx到编写Dockerfile打包自己的Python应用,轻松掌握容器化部署。

Clownseven的博客 2083

Git——修改历史记录详解

处于Rebase状态的Commit列表与平常看到的记录是相反的,所以如果想在某两个Commit之间再增加Commit,要注意停下来的那个点是不是正确的点。不止这样,因为这两个Commit对象被换掉了,在它之后的Commit因为前面的历史信息被改了,所以后面整串的Commit全部都重做新的Commit对象来替代旧的Commit对象。这里也是一样,看起来只是改字,但因为Commit对象的信息也会影响SHA-1的计算,所以Git会做出新的Commit对象来替代原来的Commit对象。

吴声子夜歌的博客 5197

保姆级教程:用OpenCV和MediaPipe在Python里实现实时手势识别(附完整代码)

本文提供了一份详细的Python教程,教你如何使用OpenCV和MediaPipe实现实时手势识别系统。从环境配置、手部关键点检测到手势分类算法,逐步讲解如何构建高精度手势识别应用,适用于智能家居控制、PPT操作等场景。教程包含完整代码示例和性能优化技巧,特别适合计算机视觉初学者和开发者实践。

weixin_28677005的博客 327

Dify 系列教程 | 第 6 篇:工作流入门 -- 用可视化方式编排 AI 逻辑

Dify 工作流是一个基于有向无环图(DAG)的可视化 AI 逻辑编排系统。你可以把多个处理步骤(节点)用连线串联起来,数据从起点流向终点,每经过一个节点就被处理一次。用一个类比来理解:如果单次 Prompt 调用是"一道菜",那工作流就是"一道完整的生产线" – 原材料(输入)进入流水线,经过清洗(预处理)、切配(数据转换)、烹饪(AI 推理)、装盘(格式化输出)等工序,最终产出成品。创建一个工作流类型的应用(或高级聊天类型),就会进入工作流编辑器。编辑器基于ReactFlow构建(

weixin_43674738的博客 118

git 相同commit_git整理commit的基本方法

觉得整理commit还是非常重要的一种技能,看到有人已经很好地整理过了,也搬运到自己的博客中,以备不时之需。本文转载自:Git整理Patch的一些经验。U-Boot升级到了最后,需要将之前比较杂乱的commit重新整理,有的需要整合,有的需要拆分。在这个过程中深刻的体会到了git的强大和灵活性。这里总结一下大的步骤和中间用到的各种小技巧。步骤commandsusagegit checkout –b...

weixin_36400198的博客 509

基于毫米波生物感知雷达+STM32设计的独居老人居家监护系统(微信小程序)(192)

当前基于STM32设计的独居老人居家监护系统为独居老人提供一种简便、实时的健康监护服务。该系统通过集成多种传感器和功能模块,能够实时监测老人的生理指标、姿态以及室内环境状况,并通过微信小程序远程显示数据,当出现异常情况时及时发出报警提醒。

1万+

【git 整理提交】git rebase -i 命令详解

git rebase -i 详解 变基时有六个命令可用: pick 更改提交顺序、删除提交 record 修改提交消息(提交内容不变) edit修改提交 squash合并提交 fixup合并提交,只保留较早的提交信息 exec 执行任意shell命令

the_power的博客 7万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Git交互式变基:合并Commit的完整指南与实战

在版本控制系统中,提交历史是项目演进的宝贵记录。通过合并多个细碎的提交,可以形成逻辑清晰、意义完整的提交单元,这对于代码审查、问题回溯和生成更新日志至关重要。其核心原理在于对本地提交历史进行重写与整理,而非直接修改已发布的代码。从技术价值看,这能显著提升代码库的可读性与可维护性,是工程实践中的重要环节。在团队协作开发场景下,尤其是在准备合并请求(Pull Request)或功能分支集成时,一个整洁的提交历史能极大提升协作效率。本文聚焦于使用交互式变基(Interactive Rebase)这一强大工具,深入

weixin_30268921的博客 408

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

git-revise完全指南:如何高效更新、拆分与重组Git提交

git-revise是一款强大的Git子命令工具,能够帮助开发者高效地更新、拆分与重组Git提交历史,实现更整洁、专业的版本控制管理。无论是修复提交错误、优化提交顺序还是合并相关更改,git-revise都能提供简洁而强大的解决方案。 ## 为什么选择git-revise? 在日常开发中,我们经常需要对Git提交历史进行调整。传统的`git rebase -i`命令虽然功能强大,但操作复杂且效

gitblog_01131的博客 697

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

git重写历史

本文全面介绍Git重写历史的核心操作,包括基础概念、常用命令及实战场景。重点讲解交互式变基(git rebase -i)、重置(git reset)和挑选提交(git cherry-pick)等关键命令,提供合并小提交、修改提交信息等典型场景的解决方案。特别强调安全注意事项,警告不要重写已推送的公共历史,并推荐备份和--force-with-lease推送方式。文档还包含最佳实践、故障排除方法和实用脚本,帮助开发者维护清晰、规范的提交历史。

SDTechnology的博客 1182

终极Git提交优化工具:git-revise核心功能详解与实战案例

git-revise是一款高效的Git提交优化工具,它能够帮助开发者在内存中快速完成提交的变基、修复和重组操作,比传统的git-rebase命令更加高效和易用。无论是需要修改历史提交、合并修复补丁,还是重新排列提交顺序,git-revise都能提供流畅的操作体验,让版本控制工作流更加顺畅。 ## 🚀 核心优势:为什么选择git-revise? 与传统的`git rebase -i`相比,gi

gitblog_00111的博客 813

git合并多次提交记录

命令 git rebase -i HEAD~4 或者 git rebase -i bddesdd6#要合并的提交的上一条提交ID 合并(vi编辑器模式) pick bddebfb1 退出修改 f 68326b8c 接口修改 f 699501f7 接口修改 f 784e86b3 接口修改 # Rebase 2b8d14b7..784e86b3 onto 784e86b3 (4 commands) # # Commands: # p, pick <commit> = use co.

qq_27346503的博客 1995

GitLab实战:如何用rebase -i优雅合并多个commit(附常见错误排查)

本文详细介绍了如何使用GitLab中的交互式rebase(rebase -i)优雅合并多个commit,包括基础操作、实战步骤和高级技巧。通过squash命令整合零散提交,提升代码审查效率,同时提供常见错误排查方案,帮助开发者维护整洁的Git提交历史。

weixin_28840143的博客 372
上一篇: Kth Largest Element in an Array
下一篇: Leetcode220-Contains Duplicate III
coderhuhy
博客等级 码龄12年 24粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值