Git | 版本控制操作

概述

基本概念
  • 提交 Commit
    • 每次提交保存一个文件快照(版本),包含修改内容、作者、时间、提交信息等
    • 每次提交有唯一的 Commit ID(SHA-1 哈希值,如 1094adb...),用于标识版本
  • HEAD 指针
    • 指向当前所在的版本(即最新提交),相当于当前工作目录的状态
    • 移动 HEAD 指针可切换不同版本(如回退或前进)
  • 分支 Branch
    • 分支的本质是指向某个提交的可移动指针 (如 master 分支)
    • 默认分支通常是 master 或 main,用户可创建其他分支实现并行开发、团队共同开发
特点
  • 快照存储 ------ 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

相关推荐
超级新零售1 小时前
AI 零售软件是什么?从库存提醒到智能调货的系统分工
大数据·人工智能·零售
程序员柒叔2 小时前
Diagram Design 解构:45 种图型如何用语义路由与 SVG 质量门交付
人工智能·github·agent·skills
逛逛GitHub2 小时前
9 个神级 GitHub 项目助你蹭上抖音、小红书 Vibe 知识大赏热点。
github
m4Rk_2 小时前
【论文阅读】Agent 记忆机制(119):EvoLife——让具身 Agent 把主动问到的答案沉淀为可复用的空间经验
论文阅读·人工智能·学习·开源·github
sun153690275722 小时前
基坑边坡监测:振弦式土压力计选型、安装埋设与数据采集方案
大数据·物联网·自动化
数字新视界3 小时前
机房动环监控系统在提升数据中心能效与安全中的应用探索
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
roman_日积跬步-终至千里3 小时前
零售与数仓(四):指标定义——从业务问题到可信计算
大数据·零售
AntsData3 小时前
用 12K+ 条亚马逊评论信号,定位机械键盘下一版该改什么
java·大数据·计算机外设
蓝鲨硬科技4 小时前
Token之后,物理AI需要什么样的度量衡?
大数据·人工智能
GlobalInfo4 小时前
管道检测机器人行业调查、市场规模、排名分析报告2026-2032
大数据·人工智能·机器人