git 学习笔记 —— 切换和恢复提交版本( git reset/reflog/tag 命令)
记录一下关于 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 命令)的更多相关文章
- Git学习笔记(SourceTree克隆、提交、推送、拉取等)
学习一下sourcetree使用git 目录 一 克隆Clone 二 提交Commit和推送Push 三 拉取pull和获取fetch 四 版本回退reset 五 检出checkout 六 标签Tag ...
- git学习笔记(二)—— 创建版本库&&版本管理
一.创建版本库 创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录: mkdir gitHub_CXWcd gitHub_CXW git init Initialized empty G ...
- Git学习笔记——一个NB的分布式版本控制系统
1. 命令: git init 创建新仓库 (在一个空文件下然后执行命令) git clone + 路径 检出仓库,从本地或从服务器上 git status 查 ...
- Git 学习笔记之(一) 使用 git gui 从github上下载代码
背景: 目前一些开源代码均在 GitHub上管理的,包括自己写的代码也可以放在上面进行管理.但问题是,当你换一台电脑,想要将你自己放在 GitHub 上的代码工程下载下来的时候,会遇到各种问题,目前可 ...
- Git学习笔记day01 从GitHub克隆版本库
本期Git教程将会带您进入Git的世界,这是您使用分布版本控制工具Git的开端,祝您学习顺利! 步骤一 在Linux系统中下载Git 如果是Ubuntu系统,在shell中输入指令 sudo apt ...
- Pro Git 学习笔记
Pro Git 学习笔记 文档地址:Pro Git原文地址:PRO GIT 学习笔记 git常见命令 1.Git起步 初次运行Git前的配置 用户信息 git config --global user ...
- Git学习笔记与IntelliJ IDEA整合
Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...
- [转]Git学习笔记与IntelliJ IDEA整合
Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...
- Git学习笔记(一)创建版本库并添加文件
最近从廖雪峰老师的个人网站上学习git,做点笔记. ★★★★★ 先注册自己的username和email,否则会报如下错误: 注册:git config --global user.name &quo ...
随机推荐
- linux系统ubuntu中在命令行如何打开图形界面的文件夹
用linux查看文件列表之类的受到命令行限制,还是不太方便的.在文件夹中打开的话,切换路径又没有linux终端快,于是,需要在命令行窗口中打开文件夹.如何做呢? 来到终端命令行中,cd切换你的路径,使 ...
- AQS1---走向稳定态
AQS的思想(稳定思想):即使确定了正常节点,这个节点也可能下一秒异常,即使找到了正常节点,这个节点可能只是异常status=0/-1的节点,这些都不要紧,都只是在自己旋转‘生命周期’里面和自己所看到 ...
- 微信公众号 --- 获取access_token
获取access_token 在左侧菜单栏中也可以找到 可以一步步的进行设置 , 身份验证的时候要 注意:密码是你创建微信公众号的密码 往一步步的执行就可以了 接下来就是获取ip 白名单,进行设置 ...
- php 跳出循环 break
break语句可以带一个参数n,表示跳出循环的层数,如果要跳出多重循环的话,可以用n来表示跳出的层数,如果不带参数默认是跳出本重循环.
- [转帖]direct path read直接路径读
direct path read直接路径读 http://blog.itpub.net/12679300/viewspace-1188072/ 原创 Oracle 作者:wzq609 时间:2014- ...
- [转帖]美团在Redis上踩过的一些坑-3.redis内存占用飙升
美团在Redis上踩过的一些坑-3.redis内存占用飙升 博客分类: 运维 redis redismonitor内存突增client listinfo 转载请注明出处哈:http://car ...
- OpenCV 静态库 CMAKE 文件
cmake_minimum_required(VERSION 3.12)project(computer_cv) set(CMAKE_CXX_STANDARD 11) find_package(Ope ...
- PHP 将字符串中的数字转化为数组
$str ='现在是2019年11月18日下午17点25分';$result='';$arr=[];for($i=0;$i<strlen($str);$i++){ if(is_numeric($ ...
- ZYNQ笔记(6):普通自定义IP封装实现PL精准定时中断
软件的定时中断很难控制精准触发沿的位置,可以通过 PL-PS 的中断完成精准的定时中断.PL 的中断通过 Verilog 代码产生,这样紧密结合 PS-PL 的处理,发挥各自的优势. 一.PL 侧定时 ...
- shell-快速入门_批处理脚本编程语言
1. Shell概述 1.1. Shell是什么 Shell是一门批处理脚本编程语言. 批处理是什么? 操作系统都分为(GUI)图形界面,命令界面(command). 命令操作的可以不用一一条执行.可 ...