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

相关推荐
JackieDYH4 小时前
Git 与 GitHub 新电脑配置指南(从零开始)
git·github·工具·使用教程
C++、Java和Python的菜鸟4 小时前
第2章 项目前置课-代码版本控制Git
大数据·elasticsearch·搜索引擎
Sammyyyyy5 小时前
如何在不停项目不停机的情况下切换AI大模型
大数据·人工智能
circuitsosk6 小时前
跨境电商智能化实战:AI如何赋能客服自动回复、广告智能投放与供应链预测
大数据·人工智能·python·langchain·智能客服
数智化管理手记7 小时前
海量数据如何沉淀有效数据资产?数据标准化治理方案如何搭建?
java·大数据·人工智能
刀客Doc7 小时前
即时零售不只是多一个渠道,品牌开始重做终端生意
大数据·数据库
湘美书院--湘美谈教育7 小时前
湘美书院主理人谈AI文学:提示词与Skill的与时俱进
大数据·人工智能·安全·自动化·生活
weixin_549808367 小时前
人力资源数字化转型:从工具堆叠到AI原生架构的组织级跃迁路径
大数据·人工智能
l0001098 小时前
图书馆静谧环境构建:主流声学品牌产品与服务梳理
大数据·人工智能·声音
ACP广源盛139246256739 小时前
蚂蚁百灵 Ling‑3.0‑flash 开源 + 昇腾 0‑Day 原生适配@ACP#GSV9001E 在国产算力矩阵中的机会与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件