【Git】三、版本回退&撤消修改&文件删除
提要
//查看git操作日志
$ git log
//单行格式查看操作日志
$ git log --pretty=oneline
//还原操作到上一次版本,有几个^就上几次
$ git reset --hard HEAD^
//还原操作到某一次版本,后面的是版本code
$ git reset --hard e6ded2
//撤销修改,在add之前的修改,撤销工作区中的修改
$ git checkout -- testgit.txt
//撤销修改,在add之后的修改,撤销到add前
$ git reset HEAD testgit.txt
//删除工作区中的文件
$ rm test.txt
一、版本查看
多次提交后可以通过指令查看历史提交记录
$ git log
commit a50498c8d3cb4f77eb6b2230b5e4fdc80d3f7e09 (HEAD -> master)
Author: shane <ls199242@163.com>
Date: Sat Jul 1 11:23:53 2017 +0800
test commit,2 files is commited
commit 81a320cda2e80405cb9e4c92c236bc7289eaf0f8
Author: shane <ls199242@163.com>
Date: Sat Jul 1 10:47:47 2017 +0800
readme file
以上是详细信息的版本,可以使用指令只呈现一行,看起来比较清晰
$ git log --pretty=oneline
e6ded21d1de20d8ea2b847e9a35ac50fcabfac70 (HEAD -> master) test commit2
a50498c8d3cb4f77eb6b2230b5e4fdc80d3f7e09 test commit,2 files is commited
81a320cda2e80405cb9e4c92c236bc7289eaf0f8 readme file
这个是又提交了一次的历史log,--pretty=oneline表示用一行的格式显示提交
前面一串是提交版本的id,HEAD表示当前版本,id后面跟着的是提交的content
二、版本回退
查看指令后如果最近一次提交有错误想要回退到前一次,可以使用指令重置,类似于游戏里的读档
$ git reset --hard HEAD^
HEAD is now at a50498c test commit,2 files is commited
使用指令reset就可以还原到某一次提交,HEAD^表示还原到上一个版本,如上例中的a50498c 版本
有几个^就回退几个版本,如果版本较多可以写成HEAD~n,n代表回退的版本个数
此时再查看log
$ git log
commit a50498c8d3cb4f77eb6b2230b5e4fdc80d3f7e09 (HEAD -> master)
Author: shane <ls199242@163.com>
Date: Sat Jul 1 11:23:53 2017 +0800
test commit,2 files is commited
commit 81a320cda2e80405cb9e4c92c236bc7289eaf0f8
Author: shane <ls199242@163.com>
Date: Sat Jul 1 10:47:47 2017 +0800
readme file
三、回退错误的还原
此时最后一次的提交log已经没有了,如果还原错了,只要有最后一次提交的版本id,也是可以撤销还原的,再回到最后一次的版本
$ git reset --hard e6ded21d1de20d8ea2b847e9a35ac50fcabfac70
HEAD is now at e6ded21 test commit2
如果你找不到id,git提供了一个指令,可以回溯你的每一次操作,即使你关掉了git bash 第二天再打开,也是可以看到记录的
$ git reflog
e6ded21 (HEAD -> master) HEAD@{0}: reset: moving to e6ded21d1de20d8ea2b847e9a35ac50fcabfac70
a50498c HEAD@{1}: reset: moving to HEAD^
e6ded21 (HEAD -> master) HEAD@{2}: commit: test commit2
a50498c HEAD@{3}: commit: test commit,2 files is commited
81a320c HEAD@{4}: commit (initial): readme file
在这里就能找到最后一次提交的id是e6ded21,然后再reset到这个版本就好了
四、撤销修改
撤销修改有两种场景
4.1在add进暂存区之前的修改撤销
当你在工作区修改了一部分文件,但是又想舍弃修改的时候,一个一个还原会很麻烦,这时git提供了一个指令
$ git checkout -- testgit.txt
git checkout -- 文件名,指对这个文件进行还原,--很重要,如果不加--表示切换到某个分支
4.2在add进暂存区之后的修改撤销
如果你要舍弃的修改已经add到了暂存区,需要使用以下指令
$ git reset HEAD testgit.txt
git reset HEAD 文件名,表示将当前master分支暂存区的文件testgit.txt unstage到工作区,然后在使用checkout指令撤销修改即可
五、文件删除
如果你新建了一个文件,并且add、commit到了本地分支,然后你想把他删除,可以使用以下指令
$ rm test.txt
rm 我猜是remove的意思,这个指令只是删除工作区中的文件,git会检测到test.txt 有修改
此时如果确实要删除文件并提交,需要先执行git中的文件删除,即相当于把删除的修改add到暂存区,再进行提交
$ git rm test.txt
rm 'test.txt'
$ git commit -m "delete test.txt"
[master e8c7ff0] delete test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
若是误删,和上面修改文件还原操作一致,先使用git reset HEAD filename ,再使用git checkout -- filename,进行还原
【Git】三、版本回退&撤消修改&文件删除的更多相关文章
- SVN的搭建及使用(三)用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突,重新设置用户名和密码等
添加文件 在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文件会显示为没有版本控制的状态,如图: 这时候,你需要告知TortoiseSVN你的操作,如图: 加入以后,你的文件会变 ...
- Git(时光机-版本回退)
现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control system. ...
- Git学习--版本回退
现在,你已经学会了修改文件,然后把修改提交到Git版本库,现在,再练习一次,修改readme.txt文件如下: Git is a distributed version control system. ...
- git指令-版本回退
git指令-版本回退 回顾: 1. 修改文件 2. 添加到暂存区并提交 回顾对readme共三次修改: 1. 版本1:wrote a readme file Git is a version cont ...
- idea中git远程版本回退
idea中git远程版本回退 2017年10月15日 15:25:36 gomeplus 阅读数:19313 工作中遇到git远程仓库需要回退到历史版本的问题,根据网上的搜索结果结合自己的实践,整理了 ...
- Git中的文件上传、修改、撤消修改和删除
1.添加文件.提交文件 1.1在learngit目录下创建一个readme.txt文件,并且输入内容. 1.2添加文件到版本库learngit 1.2.1使用git add 文件告诉Git把文件添加 ...
- git的详细使用,项目创建到同步远程仓库,版本回退,忽略文件,分支创建,分支合并,分支名称修改,冲突解决,项目迁移
注意:此处省略git的安装 1..git的工作流程示意图: 2.本地仓库的初始化: 2.1 创建一个文件夹,如我创建的是:D:\gitdemo\shop 2.2 进入shop目录,鼠标右键,打开git ...
- git代码版本回退
git log 用于查看我们修改提交的快照记录(commit记录),然后会有个commit修改记录的id编号,该命令显示从最近到最远的提交日志,我们可以看到3次提交记录,如下: git checkou ...
- Git回版本回退
这里我们使用命令行的方式对已经提交的版本进行强行回退操作~~~ 一.将git的安装目录bin放到path路径中, 如下图所示: 二.进入cmd界面,依次输入下面内容即可(git 远程仓库 回退到指定版 ...
随机推荐
- pip安装软件报错 utf-8 code can't decode byte 0xcf in position7
pip安装软件报错 utf-8 code can't decode byte 0xcf in position7 根据错误提示的路径找到__init__.py文件 根据错误提示的最后几句话找到对应的行 ...
- 找回Firefox4的状态栏!Status-4-Evar扩展
Status-4-Evar这个扩展能让Firefox4故意移除的状态栏给找回来!官方下载地址为:https://addons.mozilla.org/zh-CN/firefox/addon/23528 ...
- 【leetcode】504. Base 7
problem 504. Base 7 solution: class Solution { public: string convertToBase7(int num) { ) "; st ...
- golang struct组合,转型问题请教
type Action interface { OnHurt2(other Action) GetDamage() int } type Base struct { atk, hp int } fun ...
- Jmeter 逻辑控制器 之 While Controller
一.认识 While Controller 如下图,创建一个While Controller (While 循环控制器) 设置界面如下: Condition (function or variable ...
- Egret入门学习日记 --- 第六篇(书中 3.6~3.9节 内容)
第六篇(书中 3.6~3.9节 内容) 在本篇写之前,还是要为昨天写的日记道歉才行,差点就误人子弟了. 没想到在程序员界最低级的错误 “单词拼写错误” 还是会经常犯. childrenCreated ...
- 阻止移动端input按钮聚焦时唤起软键盘的方法
一.设置input为readonly 二.使用JS代码,在input按钮fous时就让其blur
- thymeleaf如何遍历数据 each循环的使用
首先在html开始标签中引入一个属性 xmlns:th="http://www.thymeleaf.org" 遍历数据示例 <tbody> <tr th:each ...
- Python基础总结之第十天开始【认识模块、包和库】(新手可相互督促)
每天都有一种备课的赶脚~~~ 什么是模块? 在实际的开发过程中,代码量肯定有成千上万行的代码,甚至十几万行代码也很正常吧... 那么这么多的代码如果放在一个文件中,肯定是很不合适的,为了以后程序的编写 ...
- [NOI2019]序列
LOJ3158 , Luogu5470 从 \(a_1\dots a_n\) , \(b_1\dots b_n\) 中各选出 \(K\) 个数 , 且至少 \(L\) 组下标在两个数组中都被选择 , ...