本文参考廖雪峰老师的博客进行总结,完整学习请转廖雪峰博客

一、版本回退

1.git log提交日志

在git中可以通过个git log 命令显示从最近到最远的提交日志。

$ git log
commit 8d6d5e1bf04960a41e31fcae166bac74dc6173ea (HEAD -> master)
Author: bryce <bryceyx@gmail.com>
Date: Sun Aug 13 14:37:20 2017 +0800 it is amazing commit 25840743f1f432860393505acbd081ee947548a3
Author: bryce <bryceyx@gmail.com>
Date: Sun Aug 13 14:35:35 2017 +0800 i love git

通过git log –pretty = oneline可以化简输出的信息

2.回退到过去

$git reset --hard HEAD^
(HEAD^表示上一版本,也可以HEAD~100表示第100个版本)

另一种方法是$git reset –hard +commit id

版本号没必要写全,前几位就可以了,git会自动去查找

3.恢复到未来

gitreflog用来记录每一次命令,确定回到未来哪一个版本号。再通过git reset –hard +commit id即可回到未来。

小结

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset –hard commit_id。

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

二、工作区和暂存区

  • 工作区就是电脑里能看到的目录

    (working directory)
  • 版本库(respository)

    工作区有一个隐藏目录 “.git”,不算是工作区,而是git的版本库。git版本库里存的最重要的成伟stage的暂存区。



    第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

    第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

    因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

三、管理修改

理解Git是如何跟踪修改的,每次修改,如果不add到暂存区,那就不会加入到commit中。

所以方法是:第一次修改 -> git add -> 第二次修改 -> git add -> git commit

四、撤销修改

1.$git checkout – readme.txt

意思是把readme.txt文件在工作区的修改全部撤销。

这里出现两种情况:

  • 一种是readme.txt自修改后还没放到暂存区,现在撤销修改后就回到和版本库一摸一样的状态
  • 另一种是readme.txt已经添加到暂存区,又做了修改,现在,撤销修改就回到添加到暂存区后的状态。

(博主小提示:如果使用的是windows系统,而且是txt文本框的话是看不到这种变化的,垃圾txt,建议去下载notepad++或者其他能功能丰富一点的文本编辑软件)

  • 总之,就是让这个文件回到最近一次git commit 或者git add 时的状态。

    2.git reset HEAD filename可以把暂存区的修改撤销掉,重新放回到工作区。
  • git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

    小结

小结

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD

file,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

五、删除文件

当使用命令命令$rm -参数 test.txt,这时出现工作区与版本库不一致

面临两个选择:

  • 一是确实要删除该文件

    那就用git rm test.txt并且git commit到版本库,文件就从版本库删除了。

  • 另一种情况是删错了

    把误删的文件恢复到最新版本:

    $git checkout –test.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

GIT学习之路第三天 文件操作的更多相关文章

  1. Git学习之路(6)- 分支操作

    ▓▓▓▓▓▓ 大致介绍 几乎所有的版本控制系统都会支持分支操作,分支可以让你在不影响开发主线的情况下,随心所欲的实现你的想法,但是在大多数的版本控制系统中,这个过程的效率是非常低的.就比如我在没有学习 ...

  2. Git学习之路(4)- 撤销操作、删除文件和恢复文件

    ▓▓▓▓▓▓ 大致介绍 经过前面的学习(小白学Git)已经建立了版本库,并上传了文件,这次来学习对这些文件进行基本的操作,即: ◆ 撤销操作 ◆ 删除文件 ◆ 恢复文件 我在此之前,已经将三个文件提交 ...

  3. Zookeeper学习之路 (三)shell操作

    Zookeeper的shell操作 Zookeeper命令工具 在启动Zookeeper服务之后,输入以下命令,连接到Zookeeper服务: [hadoop@hadoop1 ~]$ zkCli.sh ...

  4. FastAPI 学习之路(三十三)操作数据库

    通过创建pydantic模型进行验证提交数据 from pydantic import BaseModel class UserBase(BaseModel): email: str class Us ...

  5. Git学习之路(2)-安装GIt和创建版本库

    ▓▓▓▓▓▓ 大致介绍 前面一片博客介绍了Git到底是什么东西,如果有不明白的可以移步 Git学习之路(1)-Git简介 ,这篇博客主要讲解在Windows上安装Git和创建一个版本库 ▓▓▓▓▓▓ ...

  6. Git学习之路(5)- 同步到远程仓库及多人协作问题

    ▓▓▓▓▓▓ 大致介绍 我们写好文件后添加到版本库,但是这样还没有做完,我们还需要将它同步到GitHub的远程仓库上,这里就以我们刚开始的drag项目为例,我们在Git学习之路(2)-安装GIt和创建 ...

  7. [转]Spark学习之路 (三)Spark之RDD

    Spark学习之路 (三)Spark之RDD   https://www.cnblogs.com/qingyunzong/p/8899715.html 目录 一.RDD的概述 1.1 什么是RDD? ...

  8. [Python学习笔记][第七章Python文件操作]

    2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...

  9. Git学习之路(3)-提交文件到三个区

    ▓▓▓▓▓▓ 大致介绍 年过的差不多了,开始学习!小白学Git(持续更新) Git有三个工作区域: ◆ 工作区(Working Directory) ◆ 暂存区(Stage) ◆ 版本库(Reposi ...

随机推荐

  1. Python模块:configparser、hashlib、(subprocess)

    configparser模块: 此模块用于生成和修改常见配置文档. 一个常见配置文件(.ini的后缀名)格式如下: [DEFAULT] # DEFAULT 是指后面的字典里都会默认有的内容 Serve ...

  2. Linux下汇编语言学习笔记61 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  3. Thinkphp5.0 的使用模型Model查询

    Thinkphp5.0 的使用模型Model查询 一.查询多条记录 获取多个数据可以使用:select()方法和all()方法. 示例一:使用all()方法. //(1)筛选条件使用闭包函数 $res ...

  4. P1614 爱与愁的心痛

    洛谷——P1614 爱与愁的心痛 题目背景 (本道题目隐藏了两首歌名,找找看哪~~~) <爱与愁的故事第一弹·heartache>第一章 <我为歌狂>当中伍思凯神曲<舞月 ...

  5. css 實現微信聊天類似的氣泡

    要實現這樣的效果 代碼如下: --------------------------------------- <style> .test{width:300px; padding:30px ...

  6. web前端减少你按刷新的频率

    Browsersync 先下载:nodejs  ,然后安装完以后,我们在命令行打印 node -v 完成后我们进行以下操作,安装browser-sync ,官网上有详细的教程,请访问:Browsers ...

  7. skype默认占用80和443port

    今天把server的port更改为80,结果起不来,报告"port已经被占用"的错误. 使用下列命令找到了元凶: 1. netstat -ano | findstr 80 找到占用 ...

  8. c# Winform实现中国省份地图

    1.利用raphael.js IE下的VML和SVG实现矢量地图 2.JS调用c# Winform代码,代码 [System.Runtime.InteropServices.ComVisibleAtt ...

  9. 【Codeforces】Round #376 (Div. 2)

    http://codeforces.com/contest/731 不发题面了,自己点链接 总结一下 考场上 原以为这次要加很多raiting... 但FST狗记邓,只加了58rating 总结一下 ...

  10. javascript 模块化编程----模块的写法

    一.原始写法 模板就是实现特定功能的一组方法 只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块. function m1(){ //... } function m2(){ //. ...