记录一下关于 git 不同提交版本间切换的操作以及如何恢复至切换之前的版本。

  切换到之前提交的版本 —— git reset --hard

  笔者在使用 git 时,首先接触到了一个"黑魔法"命令 git reset --hard,通过该命令可以回退到 git 之前存在的提交。

  首先通过 git log 查看各个提交历史,可以看到各个提交版本的提交信息,包括其计算得到的 SHA-1 值。

    git log                      //查看存在的提交信息,包括其计算的 SHA-1 值,作者和简单描述

  在获得目标版本的信息后,可以通过 git reset --hard 命令回退到某次 git 的提交之中。

    git reset --hard       //回退到 SHA-1 值开始为 123456 的提交版本,上述命令只需要对应提交的 SHA-1 值的前几位作为参数即可

  注意:此命令会直接执行,而不会提示用户进行本地修改的提交等操作,所以在命令执行之前请保证所有的修改均已被妥善处置。

  查看分支切换记录 —— git reflog

  当使用 git reset --hard 命令从提交版本 A 回退到某个提交版本 B 后,若进行一定的任务后又需要返回提交的 A 版本时,此时通过 git log 查看提交记录可知,此时仅存在提交版本 B 之前的提交记录,而 B 之后的提交记录都无法显示出来。  此时使用 git reset --hard 命令会缺少分支 A 的 SHA-1 值作为参数。此时可以通过 git reflog 命令查看提交切换的记录。

    git reflog            //查看版本的切换记录,从而找到切换之前的版本的 SHA-1 值

  通过 git reflog 命令可以看到不同提交版本之间的切换记录,其中存在有切换版本的7位 SHA-1 开始值的信息,用户可以通过这个值使用 git reset --hard 命令指定版本 A 从而回退到切换回版本 B 之前的版本 A.

  

  查看提交标签 —— git tag

  在查看某个大型项目的 git 记录时,可以发现其中的提交记录是十分多的,想要仅通过提交时的简短描述确定每次提交的信息是困难的。另一方面,某些重要的更新如版本与新版本之间应该用额外的信息进行标注。如笔者在查看 mpeg 的软件 TMC13 时,即看到有众多的提交记录,而不同的版本提交则使用 git tag 做了标注。如笔者想要获取版本 0.0 的代码,此时直接通过 git log 查看提交记录是十分麻烦的( 提交记录很多 ),但是笔者可以通过 git tag 查看已有的标签,并通过标签定位到笔者需要的提交版本,并通过 git show 显示对应 tag 的信息,进而回退到对应的版本。

    git tag              //直接使用 git tag 命令则显示已有标签

  用户可通过 git show 查看对应标签的信息,包括其对应的提交版本等信息。

    git show tag1          //显示 tag1 标签对应的信息

  用户添加标签的方式有若干种,既可以单纯仅添加标签,也可以为标签添加注释信息,或者对已经提交的版本追加标签。

    git tag tag1                                    //为当前版本加入标签 tag1
git tag -a tag2 -m 'tag message' //在加入标签的同时为标签加入注释
git tag -a tag3 //为提交的 SHA-1 值开始位为 1234567 的提交追加标签 tag3

  在命令中加入 -d 参数表示删除对应标签。

    git tag -d tagn                //删除标签 tagn 对应的标签

  默认情况下,标签并不会被推送到远端服务器,只有用户显式的进行推送时,标签才会被 push 到远端服务器进而被所有使用该远端仓库的人看到。

    git push origin tag12          //将标签 tag12 推送到 origin 对应的远端仓库
git push origin --tags //一次将所有的标签推送到 origin 对应的远端仓库

  Git 工具 - 重置揭密 ,git - git 操作的细节,解释了 HEAD、Index 和 working directory 的意义,并讨论了 git reset --hard 命令的风险

  Git 基础 - 打标签,git - 介绍 git tag 的操作方式

  git reset --hard 操作后的数据恢复,掘金 - 关于 git reset --hard 命令操作后数据恢复的方法

git 学习笔记 —— 切换和恢复提交版本( git reset/reflog/tag 命令)的更多相关文章

  1. Git学习笔记(SourceTree克隆、提交、推送、拉取等)

    学习一下sourcetree使用git 目录 一 克隆Clone 二 提交Commit和推送Push 三 拉取pull和获取fetch 四 版本回退reset 五 检出checkout 六 标签Tag ...

  2. git学习笔记(二)—— 创建版本库&&版本管理

    一.创建版本库 创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录: mkdir gitHub_CXWcd gitHub_CXW git init Initialized empty G ...

  3. Git学习笔记——一个NB的分布式版本控制系统

    1. 命令: git init           创建新仓库 (在一个空文件下然后执行命令) git clone  + 路径      检出仓库,从本地或从服务器上 git status     查 ...

  4. Git 学习笔记之(一) 使用 git gui 从github上下载代码

    背景: 目前一些开源代码均在 GitHub上管理的,包括自己写的代码也可以放在上面进行管理.但问题是,当你换一台电脑,想要将你自己放在 GitHub 上的代码工程下载下来的时候,会遇到各种问题,目前可 ...

  5. Git学习笔记day01 从GitHub克隆版本库

    本期Git教程将会带您进入Git的世界,这是您使用分布版本控制工具Git的开端,祝您学习顺利! 步骤一  在Linux系统中下载Git 如果是Ubuntu系统,在shell中输入指令 sudo apt ...

  6. Pro Git 学习笔记

    Pro Git 学习笔记 文档地址:Pro Git原文地址:PRO GIT 学习笔记 git常见命令 1.Git起步 初次运行Git前的配置 用户信息 git config --global user ...

  7. Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  8. [转]Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  9. Git学习笔记(一)创建版本库并添加文件

    最近从廖雪峰老师的个人网站上学习git,做点笔记. ★★★★★ 先注册自己的username和email,否则会报如下错误: 注册:git config --global user.name &quo ...

随机推荐

  1. linux系统ubuntu中在命令行如何打开图形界面的文件夹

    用linux查看文件列表之类的受到命令行限制,还是不太方便的.在文件夹中打开的话,切换路径又没有linux终端快,于是,需要在命令行窗口中打开文件夹.如何做呢? 来到终端命令行中,cd切换你的路径,使 ...

  2. AQS1---走向稳定态

    AQS的思想(稳定思想):即使确定了正常节点,这个节点也可能下一秒异常,即使找到了正常节点,这个节点可能只是异常status=0/-1的节点,这些都不要紧,都只是在自己旋转‘生命周期’里面和自己所看到 ...

  3. 微信公众号 --- 获取access_token

    获取access_token 在左侧菜单栏中也可以找到 可以一步步的进行设置  ,  身份验证的时候要 注意:密码是你创建微信公众号的密码 往一步步的执行就可以了 接下来就是获取ip 白名单,进行设置 ...

  4. php 跳出循环 break

    break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环.

  5. [转帖]direct path read直接路径读

    direct path read直接路径读 http://blog.itpub.net/12679300/viewspace-1188072/ 原创 Oracle 作者:wzq609 时间:2014- ...

  6. [转帖]美团在Redis上踩过的一些坑-3.redis内存占用飙升

    美团在Redis上踩过的一些坑-3.redis内存占用飙升 博客分类: 运维 redis redismonitor内存突增client listinfo     转载请注明出处哈:http://car ...

  7. OpenCV 静态库 CMAKE 文件

    cmake_minimum_required(VERSION 3.12)project(computer_cv) set(CMAKE_CXX_STANDARD 11) find_package(Ope ...

  8. PHP 将字符串中的数字转化为数组

    $str ='现在是2019年11月18日下午17点25分';$result='';$arr=[];for($i=0;$i<strlen($str);$i++){ if(is_numeric($ ...

  9. ZYNQ笔记(6):普通自定义IP封装实现PL精准定时中断

    软件的定时中断很难控制精准触发沿的位置,可以通过 PL-PS 的中断完成精准的定时中断.PL 的中断通过 Verilog 代码产生,这样紧密结合 PS-PL 的处理,发挥各自的优势. 一.PL 侧定时 ...

  10. shell-快速入门_批处理脚本编程语言

    1. Shell概述 1.1. Shell是什么 Shell是一门批处理脚本编程语言. 批处理是什么? 操作系统都分为(GUI)图形界面,命令界面(command). 命令操作的可以不用一一条执行.可 ...