Git提取历史版本导出到新目录以及常用命令

› 社区话题 › Linux/macOS 与自动化运维 › Git提取历史版本导出到新目录以及常用命令

4
  • 该话题为空。
正在查看 0 条回复
  • 作者
    帖子
    • #1528

      追光
      管理员

      我把刚才操作过的内容整理成一份 macOS 终端 Git 常用命令教程,重点是你现在需要掌握的:查看历史、使用短 Hash、提取指定版本到独立目录,以及查看 Git 配置。

      原则是:只提取历史版本,不重置当前项目;导出到新目录,不覆盖现有文件。

      Git 常用命令教程

      一、查看提交历史

      1. 查看简洁历史(推荐)

      git log --oneline
      

      每个版本占一行,显示短 Hash 和提交说明,例如:

      9dda52d test auto deploy webhook
      07a40c6 feat: 引入本地文件与独立 Redis 双模式动态切换
      f2c611b 恢复版本
      

      2. 只看最近 20 个版本

      git log -20 --oneline
      

      3. 查看完整提交信息

      git show -s --format=fuller 9dda52d
      

      4. 查看某个版本修改了哪些文件

      git show --stat 9dda52d
      

      5. 退出历史查看页面

      按 q 键
      

      二、让 Git 默认显示短 Hash

      只需设置一次:

      git config --global log.abbrevCommit true
      

      之后执行

      git log

      时,Hash 默认就会缩短显示。

      查看设置是否生效:

      git config --global --get log.abbrevCommit
      

      输出

      true

      就是已生效。

      如果希望以后输入更短的命令查看一行式历史,还可以设置一个别名:

      git config --global alias.lg "log --oneline --decorate"
      

      以后直接执行:

      git lg
      

      注意:

      git log --oneline

      本身就会显示短 Hash,即使不设置全局选项也可以使用。

      三、手动提取指定版本(核心功能)

      这部分是你最需要掌握的:根据 Hash,把某次提交完整导出到一个独立目录。

      第 1 步:进入 Git 仓库

      以你的

      newvfx-ai

      为例:

      cd "/Users/xbaby/Sites/Machine-sites/wwwroot/lnmp/domain/community/web/wp-content/plugins/newvfx-ai"
      

      确认当前所在位置:

      pwd
      

      确认它确实是 Git 仓库:

      git rev-parse --show-toplevel
      

      第 2 步:找到目标版本

      git log -20 --oneline
      

      例如找到:

      9dda52d test auto deploy webhook
      07a40c6 feat: 引入本地文件与独立 Redis 双模式动态切换
      f2c611b 恢复版本
      

      你只需记住最前面的短 Hash,例如

      07a40c6

      。

      第 3 步:创建提取目录

      先创建存放所有历史版本的根目录:

      mkdir -p "/Users/xbaby/Sites/Git-Snapshots"
      

      然后为这次导出生成一个时间目录:

      SNAPSHOT_DIR="/Users/xbaby/Sites/Git-Snapshots/$(date +%Y%m%d-%H%M%S)"
      

      查看将要使用的路径:

      echo "$SNAPSHOT_DIR"
      

      创建目录:

      mkdir "$SNAPSHOT_DIR"
      

      这里使用

      mkdir

      而不是

      mkdir -p

      ,是为了防止目标目录已存在时继续操作。如果创建失败,就停止,不要继续提取。

      第 4 步:执行提取

      假设你要提取

      07a40c6

      :

      set -o pipefail
      git archive 07a40c6 | tar -xf - -C "$SNAPSHOT_DIR"
      

      这条命令的含义:

      • git archive 07a40c6

        :导出指定提交中的文件。

      • |

        :将导出的归档数据传给后面的命令。

      • tar -xf -

        :从标准输入读取归档并解压。

      • -C "$SNAPSHOT_DIR"

        :将文件解压到指定目录。

      注意:这条命令必须在刚才那个 Git 仓库目录中执行,因为

      $SNAPSHOT_DIR

      变量也需要在同一个终端窗口中保留。

      第 5 步:查看结果

      open "$SNAPSHOT_DIR"
      

      或者查看目录路径:

      echo "$SNAPSHOT_DIR"
      

      每次导出都创建一个新的时间目录,避免与以前的版本混在一起。

      四、常用配置与查询

      目的命令
      查看当前仓库路径
      git rev-parse --show-toplevel
      查看工作区改动
      git status --short
      查看最近 10 次提交
      git log -10 --oneline
      查看某次提交详情
      git show 07a40c6
      查看提交修改文件统计
      git show --stat 07a40c6
      查看当前用户名
      git config user.name
      查看当前邮箱
      git config user.email
      查看全局配置
      cat ~/.gitconfig
      查看短 Hash 设置
      git config --global --get log.abbrevCommit

      五、几个重要概念

      git log

      查看历史记录,不修改项目文件。

      git archive

      将指定提交中的已跟踪文件导出到独立目录,不切换当前分支,也不改写提交历史。

      导出快照不等于完整备份

      它不会包含未提交修改、未跟踪文件,也不会自动展开子模块内容。

      另外,当前阶段请暂时避开

      git reset --hard

      、

      git clean

      等可能改变或删除工作区内容的命令。你现在学习的这套方式,是把历史版本另行导出,而不是让当前项目回退到旧版本。

正在查看 0 条回复
  • 在下方一键注册,登录后就可以回复啦。