Git | 版本控制操作

概述

基本概念
  • 提交 Commit
    • 每次提交保存一个文件快照(版本),包含修改内容、作者、时间、提交信息等
    • 每次提交有唯一的 Commit IDSHA-1 哈希值,如 1094adb...),用于标识版本
  • HEAD 指针
    • 指向当前所在的版本(即最新提交),相当于当前工作目录的状态
    • 移动 HEAD 指针可切换不同版本(如回退或前进)
  • 分支 Branch
    • 分支的本质是指向某个提交的可移动指针 (如 master 分支)
    • 默认分支通常是 mastermain,用户可创建其他分支实现并行开发、团队共同开发
特点
  • 快照存储 ------ Git 保存文件快照而非差异,切换版本时直接还原快照,速度快
  • 指针操作 ------ 版本切换的本质是移动 HEAD 指针,而不是进行文件复制
  • 数据安全 ------ 即使回退,由于回退前的提交仍存于 .git 中,并未被删除,因此可通过 reflog 找回

指令介绍

版本控制的核心指令是 git reset ,本质上是撤销更改和移动 HEAD 指针

sh 复制代码
git reset [-mode] [-commit]
模式 mode HEAD 移动 暂存区 工作区 适用场景
--soft ✅ 回退 ❌ 保持不变 ❌ 保持不变 修改提交历史
--mixed(默认) ✅ 回退 ✅ 重置(撤销 git add ❌ 保持不变 撤销暂存区修改,重新组织提交
--hard ✅ 回退 ✅ 重置 ✅ 完全回退 彻底丢弃包括工作区在内的所有更改

版本回退

相关指令
  • git reset------ 撤销更改和移动 HEAD 指针
  • git log ------ 按时间倒序排列显示当前分支的提交记录
实操:回退到上个版本
  • 假设当前用户已进行三次提交 git commit 操作,提交哈希值 Commit id 和附带信息如下:

    提交序号 提交哈希值 附带信息
    1 eaadf4e35... wrote a readme file
    2 e475afc93... add distributed
    3 (最新一次,由 HEAD 指针指向) 1094adb7... append GPL
  • 回退上个版本 ------ 输入命令 git reset --hard HEAD^ 回退到上一个版本 add distributed

    sh 复制代码
    $ git reset --hard HEAD^
    HEAD is now at e475afc add distributed
  • 参数含义

    • ^ 符号表示法 ------ HEAD^ 后面的 ^ 符号表示向上追溯一个父提交 ,每增加一个 ^ 就向上移动一个版本

    • ~ 符号表示法 ------ HEAD~ 后面的 ~ 符号可以视为缩写 方式,通常在 ~ 后加数字,表示追溯到第几个版本

    • 二者区别

      • ^ 主要用于合并提交(有多个父提交的情况),如
        • HEAD^1 = 第一个父提交
        • HEAD^2 = 第二个父提交(通常是合并进来的分支)
      • ~ 永远沿第一个父提交向上追溯
    sh 复制代码
    # 回到上一个版本
    git reset --hard HEAD^
    git reset --hard HEAD~
    
    # 回到上两个版本
    git reset --hard HEAD^^
    git reset --hard HEAD~2  # 等价写法
    
    # 回到上五个版本
    git reset --hard HEAD^^^^^
    git reset --hard HEAD~5  # 更简洁的写法
实操:回退到指定版本
  • 查找版本号 ------ 输入命令 git log 查找需要回退的指定版本的 Commit id ,指令列出已提交的版本和 Commit id

    sh 复制代码
    $ git log --pretty=oneline
    1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
    e475afc93c209a690c39c13a46716e8fa000c366 add distributed
    eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote readme file
    ...
  • 回退指定版本 ------ 输入命令 git reset --hard commit_id 回退到该版本

    sh 复制代码
    $ git reset --hard eaadf4
    HEAD is now at eaadf4 append GPL

    技巧 :在指令中,回退的 Commit id 值没必要写全,只写前几位,能够区分其他版本即可

  • 查看情况 ------ 输入命令 git log 再查看提交情况

    bash 复制代码
    $ git log --pretty=oneline
    eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
    ... ...

版本恢复

版本恢复的关键在于如何查找需要恢复的 Commit id

如果命令行尚未关闭还可以向上翻找,如果命令行关闭则需要使用 git reflog 进行查询

相关指令
  • git reset------ 撤销更改和移动 HEAD 指针
  • git reflog ------ 记录本地仓库中 HEAD 和分支引用的变更历史,用于查看命令历史
实操:回退某版本 + 命令行未关闭
  • 往上查找 ------ 命令行往上查找之前版本的 Commit id

  • 回退该版本号 ------ 输入命令 git reset --hard commit_id 回退到该版本

    sh 复制代码
    $ git reset --hard 1094a
    HEAD is now at 83b0afe append GPL
实操:回退某版本 + 命令行已关闭
  • 查找之前的版本 ------ 输入命令 git reflog 查找 Commit id

    sh 复制代码
    $ git reflog
    e475afc HEAD@{1}: reset: moving to HEAD^
    1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
    e475afc HEAD@{3}: commit: add distributed
    eaadf4e HEAD@{4}: commit (initial): wrote a readme file
  • 回退该版本号 ------ 输入命令 git reset --hard commit_id 回退到该版本

    sh 复制代码
    $ git reset --hard 1094a
    HEAD is now at 83b0afe append GPL

相关推荐
一条闲鱼_mytube2 小时前
GitHub K8S CI/CD 部署指南
github
LJ97951112 小时前
智能连接:Infoseek如何重新定义媒体发布效率
大数据·人工智能
安达发公司2 小时前
安达发|赢在智造赛道:给新能源汽车,装上“自动排产软件”导航
大数据·人工智能·汽车·aps高级排程·aps排程软件·安达发aps·自动排产软件
易营宝2 小时前
运营海外社交媒体平台的KPI设置与预算分配模板
大数据·人工智能·媒体
DX_水位流量监测2 小时前
城市易涝点水位雨量监测设备技术体系与实践应用
大数据·运维·服务器·网络·人工智能
2501_921649493 小时前
日本股票 API 对接,接入东京证券交易所(TSE)实现 K 线 MACD 指标
大数据·人工智能·python·websocket·金融
lyx_20163 小时前
尝试理清楚Github fork, tag, release和PR
github
Maynor9963 小时前
Nano Banana Pro - Comprehensive Prompt Collection
大数据·prompt
zhongerzixunshi3 小时前
以技术创新为翼 筑就发展新高度
大数据·人工智能·物联网