git的撤销、删除和版本回退
备注:
本文参考于廖雪峰的博客Git教程。依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查看原文。
知识点:
1、git status
,查看git仓库的状态
2、git diff
查看git修改了的内容
3、HEAD
指向的版本就是当前版本,使用git reset --hard commit_id
命令可以回到指定版本
4、通过git log
查看提交历史和git reflog
查看命令历史,确定回退或恢复到某一版本。
查看git仓库的状态
我们修改一下readme文件的内容,添加一行内容。
- 运行
git status
查看状态
liu@liu-virtual-machine:~/gitTest$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: readme.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
git status
命令可以查看仓库当前的状态,上面显示,readme.txt文件被修改过,但还没有加入提交修改的内容。
git diff
可以查看修改了什么内容,这样就可以清楚的知道上次修改的内容是什么,如下
liu@liu-virtual-machine:~/gitTest$ git diff
diff --git a/readme.txt b/readme.txt
index 90269eb..7d0ff65 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
`this is a test that I learning and use git version control system
this is a beginning
-wofaidognyixie dognxi
+i Add a new line information in the end of readme.txt file
在修改最后一行之前我添加和提交了一行wofaidognyixie dognxi
,现在修改为i Add a new line information in the end of readme.txt file
,相当于删除添加。git diff
查看不同的内容,结果显示出修改前后的对比。
git add readme.txt
添加修改,此时查看仓库状态,提示:要提交的变更为readme.txt
liu@liu-virtual-machine:~/gitTest$ git status
位于分支 master
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
修改: readme.txt
git commit
和git status
提交并查看当前仓库状态
liu@liu-virtual-machine:~/gitTest$ git commit -m "add a new line in readme.txt"
[master e181953] add a new line in readme.txt
1 file changed, 1 insertion(+), 1 deletion(-)
liu@liu-virtual-machine:~/gitTest$ git status
位于分支 master
无文件要提交,干净的工作区
显示没有需要提交的修改,干净的工作区,(working directory clean)
查看历史记录。
对于版本控制系统,重要的是我们可以查看历史记录,方便我们知道每次修改和提交的内容。
git log
查看修改历史
git log
显示从最近到最远的提交日志,每一次提交的作者、日期和提交的信息都被显示出来。
- 如果显示信息太多,可加上
--pretty-oneline
liu@liu-virtual-machine:~/gitTest$ git log --pretty=oneline
e181953c3f43e15ceee10fb86f05fd4568265127 add a new line in readme.txt
1769dcb57a1b16d3c4ed7f96828af2f1131f5882 modify
d5b84bff04a672d9f520334d42e71a3e79910f17 modifya readme file
3033dda882f53ea249d6dacd4c39c470fab700e8 add a readme file
此时每条log记录被显示在一行。
每行前面的一串字母数字是
commit id
(版本号)。和svn不一样,Git的commit id
不是1,2,3递增数字,而是一个SHA1计算出来的一个非常大的数字,16进制表示.为什么commit id
需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
Git将每一次提交串成一条时间线。
版本回退
git首先需要知道当前版本是哪个版本。Git中,用
HEAD
表示当前版本,即上面最新提交的e181...5127
,上一个版本就是HEAD^
,上上个版本使HEAD^^
,当往上100个版本时,写成HEAD~100
git reset --hard HEAD^
,将当前版本“add a new line in readme.txt”
回退到上一版本“modify”
,如下:
iu@liu-virtual-machine:~/gitTest$ git reset --hard HEAD^
HEAD 现在位于 1769dcb modify
查看readme.txt
的内容已经是modify版本,
此时用git log查看历史记录
liu@liu-virtual-machine:~/gitTest$ git log
commit 1769dcb57a1b16d3c4ed7f96828af2f1131f5882
Author: findmoon <1286637198@qq.com>
Date: Tue Feb 20 13:37:05 2018 +0800
modify
commit d5b84bff04a672d9f520334d42e71a3e79910f17
Author: findmoon <1286637198@qq.com>
Date: Tue Feb 20 12:55:06 2018 +0800
modifya readme file
commit 3033dda882f53ea249d6dacd4c39c470fab700e8
Author: findmoon <1286637198@qq.com>
Date: Tue Feb 20 12:48:53 2018 +0800
add a readme file
之前的最新版本记录已经没有。要想重新回到原来的最新版本,你需要记下当时的版本号(终端不关闭,可以向上找到)。如“add a new line in readme.txt”版本的commit id
e18195...
- 指定前进到未来某一版本
liu@liu-virtual-machine:~/gitTest$ git reset --hard e181953c3f43e15ceee10fb86f05fd4568265127
HEAD 现在位于 e181953 add a new line in readme.txt
readme.txt
内容已经变为最新版本。
git reset --hard e181953
可以不必将版本号写全,Git会自动查找
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当回退版本时,Git仅仅是把HEAD从指向当前版本,改为指向回退的版本.然后把工作区的文件更新。
- 当回退到某一版本后又想恢复到最新版本,就必须找到
commit id
。Git提共git reflog
记录你的每一次命令
liu@liu-virtual-machine:~/gitTest$ git reflog
1769dcb HEAD@{0}: reset: moving to HEAD^
e181953 HEAD@{1}: reset: moving to e181953c3f43e15ceee10fb86f05fd4568265127
1769dcb HEAD@{2}: reset: moving to HEAD^
e181953 HEAD@{3}: commit: add a new line in readme.txt
1769dcb HEAD@{4}: commit: modify
d5b84bf HEAD@{5}: commit: modifya readme file
3033dda HEAD@{6}: commit (initial): add a readme file
通过每一条命令历史前面的commit id
,就可以恢复想要的版本
git的撤销、删除和版本回退的更多相关文章
- git 撤销修改和版本回退
1. 工作区 文件只是在工作区进行了修改,还没有提交到暂存区(未进行 git add 操作) 此时可以使用 git checkout -- filename 撤销工作区文件的修改 效果相当 ...
- git撤销修改及版本回退
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file. 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步, ...
- git分支与版本管理、版本回退、冲突解决记录
一.基础使用 1.初始化本地仓库 git init 2.关联远程仓库 git remote add origin git@github.com:用户名/仓库名.git 3.添加远程仓库文件到本地 gi ...
- Git学习总结二(版本回退)
修改修改仓库中readme.txt文件,然后用git status命令看看结果: $ git status On branch master Changes not staged for commit ...
- Git新建分支,分支合并,版本回退详解
一.git基本命令 git拉取仓库代码 #拉取master代码 git clone git仓库地址 #拉取分支代码 git clone -b 分支名称 git仓库地址 2.git添加代码到本地仓库 g ...
- 『现学现忘』Git后悔药 — 31、reset版本回退命令总结
目录 1.--soft回退说明 2.--mixed回退说明 3.--hard回退说明 4.总结 在Git中进行版本回退需要使用git reset命令. 以前面文章中的示例为例,当我准备在V4版本,回退 ...
- git 教程(4)--版本回退
现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control system. ...
- git学习02 - log查看&版本回退
1.查看更新记录 git log / git log --pretty=oneline D:\learn\git_test>git log commit a915e7b12076673d778 ...
- GIt学习第二天之版本回退、工作区和暂存区
搬运自 ‘廖雪峰的官方网站’ 地址:https://www.liaoxuefeng.com/ 1.版本回退 在Git中,我们用git log命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花 ...
随机推荐
- Python 图像处理 OpenCV (10):图像处理形态学之顶帽运算与黑帽运算
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- 重装conda
重装Conda是因为想重装tensorflow,结果竟然报了各种各样稀奇古怪的错误:我贴一下自己见过的报错 The environment is inconsistent, please check ...
- Dubbo——服务目录
引言 前面几篇文章分析了Dubbo的核心工作原理,本篇将对之前涉及到但却未细讲的服务目录进行深入分析,在开始之前先结合前面的文章思考下什么是服务目录?它的作用是什么? 正文 概念及作用 清楚Dubbo ...
- MFC套接字连接不成功-记得在app的cpp文件里面初始化套接字
MFC套接字连接不成功-记得在app的cpp文件里面初始化套接字 stdafx.h文件中添加:#include "afxsock.h" BOOL CMFC_TCP_Client_c ...
- 人脸识别和手势识别应用(face++)开发
基础认识 本项目使用的是face++平台,人脸识别+手势识别双确认显示. python编程,代码简介,方便扩展. 该项目适用于Windows系统和Linux系统,但必须安装相应的模块,其中包括 l ...
- v-on事件修饰符
.stop阻止冒泡 .prevent阻止默认行为 .capture实现捕获触发事件的机制(从大到小) .self实现只有点击当前元素时,才能出发事件处理函数 .once只触发一次事件函数 .stop和 ...
- Elasticsearch的query phase和fetch phase
对于一次query查询到数据返回到客户端,经历了两个过程 query phase和fetch phase的过程 query phase 查询阶段 fetch phase 获取阶段. 1 qu ...
- JavaWeb网上图书商城完整项目-数据库操作工具类
1.首先安装数据库,在windows上安装和在unix上面安装环境不一样,我在自己的本地电脑上安装,安装成功之后,如果使用navicat远程工具访问,需要允许mysql远程能被访问 方法二.直接授权( ...
- jQuery实现全选、反选、删除
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...
- Flask04-SQL
from flask import render_template, flash, redirect from app import app from app import db, models fr ...