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 ...
随机推荐
- Laravel集成Swoole教程
1.准备工作 安装 Laravel laravel new laravel-swoole 本人使用 valet 进行开发,可以使用 laravel-swoole.test 进行访问 2 ...
- CI框架从哪里看起?CI框架怎么开始学习,CI的初始设置
很多朋友不知道CI框架从哪里开始学起,想学一个新的框架其实并不难.只要你认真研究,自习摸索都很简单! 概述和基本配置参数 配置CI: application/config/config.php:14配 ...
- Java并发编程基础-Unsafe
前言:Unsafe是Java中一个底层类,包含了很多基础的操作,比如数组操作.对象操作.内存操作.CAS操作.线程(park)操作.栅栏(Fence)操作,JUC包.一些三方框架都使用Unsafe类来 ...
- Rsync学习之旅上
rsync 简介 什么是rsync rsync是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具. 全量:将全部数据,进行传输覆盖 增量:只传输差异部分的数据 实现增量 ...
- SQL Server 中获取一个表的字段信息
直接贴代码了: SELECT sysobjects.name AS TableName, syscolumns.Id AS TableId, syscolumns.name AS DbColumnNa ...
- 绝对有效 IntelliJ IDEA2019.2下载、安装及破解教程
原文链接:https://blog.csdn.net/weixin_43904316/article/details/88881238 https://bl ...
- mysql 中的日期格式。date_format( ) 转换格式
date_format( ) 转换格式 : 格式 描述 %a 缩写星期名 %b 缩写月名 %c 月,数值 %D 带有英文前缀的月中的天 %d 月的天,数值(00-31) %e 月的天,数值(0-31) ...
- 剑指Offer 总结
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. public class Solution { public ListNode EntryNodeOfLoop(ListNo ...
- Django--母版
目录 母版 语法 案例 在之前的两个小程序中,可以发现在写html页面的时候有很多重复的代码 而在python中,为了避免写重复代码,我们通过函数.模块或者类来进行实现,所以在Django里面也有这样 ...
- 并发编程--一堆锁,GIL,同步异步,Event事件
目录 一堆锁 死锁现象(*****) 递归锁 RLock (了解) 信号量 (了解) GIL(*****) 什么时GIL锁 为什么需要GIL锁 Cpython解释器与GC的问题 GIL锁带来的问题 多 ...