打造干净的Git历史:本地仓库整理操作详解

让你的Git提交如行云流水:本地仓库整理指南

一、背景

为什么需要本地仓库整理操作呢?
因为本地仓库提交到远程仓库是无法撤回的,只能是从远端仓库拉取数据到本地,然后对相关数据进行回退,最后再提交到远端仓库。

为什么远端仓库不能撤回?
因为已经提交到远端仓库的数据可能已经别别人拉取并进行修改了,因此,我们不能把提交到远端的数据进行撤销操作。只能重新拉取下来,修改相关数据,再提交一次。
在这里插入图片描述

什么是整理操作?
本地仓库可能存在多次的提交记录,其中可能包括很多无意义的提交,因此,在将本地的修改推送到远端之前,本地需要先做一个整理,把多个提交记录合并成一个或者修改提交记录的内容等等。

在这里插入图片描述

二、整理上一次提交

整理上一次提交” 通常是指对最近一次提交进行修改或优化,主要使用git commit --amend命令完成。包括:

  1. 修改提交信息:更改上一次提交时填写的提交信息,可以使用以下命令:

    git commit --amend -m "新的提交信息"
    

    如果是复用提交记录,可以不带-m参数,这时会进入编辑器状态。

  2. 添加遗漏的文件:如果在上一次提交后意识到还有文件没有被提交,可以先将这些文件添加到暂存区,然后使用 --amend 将它们合并到上次提交中:

    git add 忘记的文件
    git commit --amend
    
  3. 修改提交的内容:类似于添加文件,你也可以修改文件的内容,然后执行 git commit --amend,这会将更改合并到上一次提交中。

三、整理多次提交

整理多次提交” 通常是指对多个提交进行重写、合并、修改或优化。最常见的是使用交互式变基(interactive rebase)方式实现。

交互式变基主要用于:

  • 整理提交历史:合并多个提交为一个提交,消除多余的提交,保持代码库的整洁。
  • 修改提交信息:更新已有的提交信息,以反映更准确的变更描述。
  • 修改提交内容:在变基过程中,可以对某个提交进行编辑,修复错误或添加更改。
  • 重新排序提交:可以更改提交的顺序,以确保提交历史的逻辑性和连贯性。

整理多次提交 非常重要,因为在分支操作和解决冲突时非常有用。对于协作开发来说,当产生冲突之后,可能会影响我们制定规则的提交序列,因此,可能需要将产生冲突的文件合并到某个提交中,这时候就需要整理多次提交。

整理多次提交的实现方式:

  1. 交互式变基(Interactive Rebase):通过执行命令 git rebase -i HEAD~n,可以对最近的 n 次提交进行整理。在交互式模式下,可以选择对每个提交执行不同的操作,例如:

    • pick:保留该提交。
    • squash:将该提交与前一个提交合并。
    • edit:修改该提交。
    • reword:修改该提交的提交信息。
    • drop:丢弃该提交。
  2. 合并提交(Squash):通过将多个提交合并为一个,也就是将几个小的、相关的提交整合为一个更大的提交,从而使历史记录更加简洁。

  3. 重新排序提交:可以改变提交的顺序,以确保日志是按逻辑顺序排列的。

  4. 修复提交:如果在多个提交中发现错误,可以通过整理提交来修复历史记录。

这里重点讲一下交互式变基 方式,因为这是最常用的。使用交互式变基 整理多次提交的语法:

# 修改hash1之后的提交信息(不包含hash1)
git rebase -i hash1
# 修改hash1到hash2的提交信息(不包含hash1)
git rebase -i h1 h2

h1是指hash1,h2是指hash2,也就是commit的版本号,这是一个左开右闭的区间。因为我们总是基于上一次修改下一次,可能要使用到git commit -amend命令,所以区别必须 左开右闭

如果git rebase -i后面不跟任何的hash值,默认整理的就是上一次push到远端的版本到最近的一个commit版本。

在修改提交的时候,只能使用两个命令:git commit --amendgit rebase --continue;并且进入REBASE状态(即变基状态)。
在这里插入图片描述
进入REBASE状态后,就可以修改文件,然后git add到暂存区,再使用git commit --amend整理到本地仓库。整理完成之后,使用git rebase --continue继续(因为可能会有多个REBASE,如果有多个REBASE就要按照需要重复前面的整理操作),直到回到master分支。

这里再提一下另一个实际工作中常见的整理操作:合并提交(Squash)。这个同样要用到交互式变基,合并多个提交时使用 squash操作,修改为squash操作后需要重新写提交记录。

整理操作也可以借助Git可可视化工具完成,比如 SourceTree、TortoiseGit(小乌龟)

整理多次提交的好处:

  1. 简化历史:将多个小提交合并为一个有意义的提交,使得提交历史更加清晰、易读。

  2. 提高可理解性:清晰的提交记录使得团队成员能够更容易理解每个变更的意图,容易查找问题。

  3. 减少“噪音”:避免提交日志中充斥着很多小的、细微的提交(如“修复错误”、“更新文档”等),提高版本控制的质量。

  4. 修复错误:如果某个提交包含错误,通过整理可以修复该提交,保持历史的清晰性。

  5. 增强代码审查:整理后的提交在进行代码审查时,能够更加方便审查者理解每个提交的改动。

  6. 避免冲突:在合并分支时,明确的提交历史可以减少后续合并时可能出现的冲突。

四、注意事项

进行整理操作的时候,必须是自己的仓库,也就是别人不会依赖你的仓库。因为作为开发者,都会有一个自己的功能分支,这个分支是自己私有的,不会被别人依赖。

千万不要在develop分支或者master分支做变基操作,因为从变基那个节点开始往后的所有节点的commit id都会发生变化,如果被别人依赖的话,会造成别人依赖一个不存在的提交,会引发其他人冲突。

正常的开发流程都是从develop分支或者master分支创建一个属于自己的私有分支,不被其他人依赖。在已经推送到共享或公共仓库的分支上避免进行变基或重写历史,以免引起混乱。

在完成整理操作后,使用 git loggit reflog 查看提交历史,确保它符合预期。

五、总结

在软件开发中,保持本地 Git 仓库的整洁至关重要,它不仅有助于提升代码质量,也方便团队协作。通过有效的整理操作,我们可以清晰地管理提交历史,避免历史数据的混乱。本文将深入探讨本地仓库整理的必要性,以及如何利用诸如交互式变基等工具,优化提交流程。无论是修改最近的提交,还是合并多个提交,合理的整理策略都能提升生产力,并减少潜在的冲突。让我们一起掌握这些实用技巧,确保你的版本控制流程更高效、更有条理。

在这里插入图片描述

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lion Long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值