概述

我们已经成功的添加了一个 readme.txt文件 , 现在是时候 继续工作了 , 于是 我们开始尝试一下 Git给我们所带来的便利下面修改read.txt 改成如下内容

为了尝试 Git 给我们带来的便利 这是 第一次修改 !

现在运行 git  status 查看 暂存去的状态 .

 xpower@xpower-CW65S:~/learngit$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: readme.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

上面的命令告诉我们 readme.txt 已经被修改了 , 但是没有修改的内容 , 如果想查看修改的内容的话 需要用 git diff 查看修改的内容

xpower@xpower-CW65S:~/learngit$ git diff
diff --git a/readme.txt b/readme.txt
index 8fd42a5..fa79f95
--- a/readme.txt
+++ b/readme.txt
@@ -, + @@
-git is version control systen.
-git is free software
-
+为了尝试 Git 给我们带来的便利 这是 第一次修改 !

git diff 顾名思义就是查看 difference , 显示的格式正式 Unix 通用的 diff 格式 , 可以从上面的命令输出看到我们将 原文内容修改了 .

下面我们就开始将暂存去区的内容 , 转移到工作区 .

xpower@xpower-CW65S:~/learngit$ git commit -a

这时候会出来 VIM 编译器 用于输入 这次修改的注释

 xpower@xpower-CW65S:~/learngit$ git status
位于分支 master
无文件要提交,干净的工作区

版本回退

现在再将文件修改

 为了尝试 Git 给我们带来的便利 这是 第二次修改 !

然后查看一下 暂存区 状态

xpower@xpower-CW65S:~/learngit$ git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动) 修改: readme.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

像这样 , 你不断的对文件进行修改 , 然后不断的提交修改到版本库里面 , 就好比玩RPG游戏的时候 , 每次通过一个关卡的时候就会自动把游戏状态存盘 , 如果某一关没过去 , 你还可以读取前一关的状态 . 有些时候打Boss  前你会手动存盘 以便万一失败 可以从最近的地方重新开始 . Git也是一样 , 当你觉得文件修改到了一定的程度的时候你可以 " 保存一个快照 "这个快照在Git中被称为 commit . 一但你的文件弄坏了 , 就可以从最近的一个 commit 回复 , 然后继续工作 , 而不是把几个月的工作成果全部丢失 .

现在我们回复一下 readme.txt文件一共有几个版本被提交到了 Git仓库里面

版本 1 :

 Git is a version control system.
Git is free software.

版本 2 :

为了尝试 Git 给我们带来的便利 这是 第一次修改 !

版本 3 :

为了尝试 Git 给我们带来的便利 这是 第二次修改 !

当然了 在实际工作当中 , 我们脑子里面怎么可能记得一个几千行的文件每次都修改了什么内容

这时候就可以使用 版本控制里面的 git log

 xpower@xpower-CW65S:~/learngit$ git log
commit 2d8b618e4a5ef0cb501d5b4f06fd92651b811c8a
Author: xpower <@qq.com>
Date: Sun Aug :: + 这是我进行的第二次修改为了尝试版本退回 commit a57e93105963a9060cd6ce6d3ddf62ec3fbd9397
Author: xpower <@qq.com>
Date: Sun Aug :: + 这修改 是我为了测试 而作的 commit 75cc461de80b076dc9b229442c78034bea4458e8
Author: xpower <@qq.com>
Date: Sun Aug :: + wrote a readme file

好了 我们现在将 文件退回 上一个版本

首先 Git 必须知道当前的版本是那个版本 , 在Git 当中 , 用 HEAD 表示当前版本 , 也就是最新提交的.  2d8b618e4a5ef0cb501d5b4f06fd92651b811c8a 上一个版本就是 HEAD^ 上上一个就是HEAD^^ 当然如果要上一百个版本的话 咋办 ? 写一百个 ^ ? 所以我们 写成这样 HEAD~100

现在我们将版本退回到上一个版本 .

xpower@xpower-CW65S:~/learngit$ git reset --hard HEAD^
HEAD 现在位于 a57e931 这修改 是我为了测试 而作的

上次我们所写的注释也会一并输出 .  --hard 是干啥的呢 ? 这个后面再说 .

看看 readme.txt 的内容是不是    改变了

        果真回到了我们第一次修改的内容 ,

现在 查看一下记录

xpower@xpower-CW65S:~/learngit$ git log
commit a57e93105963a9060cd6ce6d3ddf62ec3fbd9397
Author: xpower <@qq.com>
Date: Sun Aug :: + 这修改 是我为了测试 而作的 commit 75cc461de80b076dc9b229442c78034bea4458e8
Author: xpower <@qq.com>
Date: Sun Aug :: + wrote a readme file

现在版本库已经看不到第二次修改了 , 但是你有发现原来删除的就是最好的 怎么办 ?

办法就是根据该版本的版本号来退回该版本 . 如果你的终端期间没有关闭 , 那么往上翻 , 找到你想到达的版本 , 用   git reset --hard 版本号 退回       如果终端关闭了怎么办 ? 你可以使用 git refgitlog 来查看你的名词命令

 xpower@xpower-CW65S:~/learngit$ git reflog
a57e931 HEAD@{}: reset: moving to HEAD^
2d8b618 HEAD@{}: commit: 这是我进行的第二次修改为了尝试版本退回
a57e931 HEAD@{}: commit: 这修改 是我为了测试 而作的
75cc461 HEAD@{}: reset: moving to HEAD^
294198b HEAD@{}: reset: moving to HEAD^^
2b2b62f HEAD@{}: commit: understand how stage works
d197255 HEAD@{}: reset: moving to d1972551358f74925aceb7967b56d576f9ff374c
75cc461 HEAD@{}: reset: moving to HEAD^
294198b HEAD@{}: reset: moving to HEAD^
d197255 HEAD@{}: reset: moving to d1972551358f74925aceb7967b56d576f9ff374c
75cc461 HEAD@{}: reset: moving to HEAD^
294198b HEAD@{}: reset: moving to HEAD^
d197255 HEAD@{}: reset: moving to d1972551358f74925aceb7967b56d576f9ff374c
294198b HEAD@{}: reset: moving to HEAD^
d197255 HEAD@{}: reset: moving to d1972551358f74925aceb7967b56d576f9ff374c
75cc461 HEAD@{}: reset: moving to HEAD^
294198b HEAD@{}: reset: moving to HEAD^
d197255 HEAD@{}: commit: append GPL
294198b HEAD@{}: commit: add distributed
75cc461 HEAD@{}: commit (initial): wrote a readme file

找到版本号之后 , git reset --hard 2d8b618 让 HEAD 指向该版本

工作区和暂存区的概念

  工作区(Working Dire)

就是电脑里面的那个目录 , 例如我电脑里面的 learngit 这就是一个工作区

  版本库(Repository)

工作区有一个隐藏目录 .git (在之前我们已经说过了.) 这个不是工作区 , 而是Git的版本库 .

Git的版本库里面 存储了很多东西 , 其中最为重要的就是成为 stage (或者index)的暂存区 , 还有Git为我们自动创建的第一个分支 master (注意这里所说), 以及指向master的一个指针叫做HEAD.
前面我们曾经说过将文件添加到 GIt 版本库里面的时候 , 我们分两步执行

第一步  : 用 git add 把文件添加进去 , 实际上就是把文件修改添加到暂存区 .
第二步  : 用 git commit 提交更改 , 实际上就是将暂存区的内容 提交到当前分支.

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

Git ~ 回到过去 , 进入未来 ~ Git的更多相关文章

  1. GIT入门笔记(8)-- 查看历史提交记录/根据版本号回到过去或未来

    在Git中,用HEAD表示当前版本,也就是最新的提交版本, 上一个版本就是HEAD^, 上上一个版本就是HEAD^^, 往上100个版本写100个^比较容易数不过来,所以写成HEAD~100. Git ...

  2. [Git] 009 逆转未来

    1. 想逆转未来,得先知道时间线 1.1 git log 1.2 git log --oneline 此命令的显示结果比 git log 简洁 1.3 git reflog 此命令显示的记录比前两者完 ...

  3. Git详解之一 Git实战

    Git详解之一 Git实战 入门 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章 ...

  4. linux Git版本控制学习与Git服务器搭建

    来源地址 要随时掌握工作区的状态,使用git status命令. 如果git status告诉你有文件被修改过,用git diff可以查看修改内容. 初始化一个Git仓库,使用git init命令. ...

  5. git学习------>写给 Git 初学者的7个建议

    PS:本文转载于(http://blog.jobbole.com/50603/),本文由 伯乐在线 - 吴鹏煜 翻译. 英文出处:(http://sixrevisions.com/web-develo ...

  6. 工具系列 | git checkout 可替换命令 git switch 和 git restore

    前言 git checkout 这个命令承担了太多职责,既被用来切换分支,又被用来恢复工作区文件,对用户造成了很大的认知负担. Git社区发布了Git的新版本2.23.在该版本中,有一个特性非常引人瞩 ...

  7. Git 进阶指南(git ssh keys / reset / rebase / alias / tag / submodule )

    在掌握了基础的 Git 使用 之后,可能会遇到一些常见的问题.以下是猫哥筛选总结的部分常见问题,分享给各位朋友,掌握了这些问题的中的要点之后,git 进阶也就完成了,它包含以下部分: 如何修改 ori ...

  8. git diff 生成patch, git apply patch 打补丁方法说明,以及分支管理的简单操作。

    git diff 简易操作说明 先git log 查看commit ID, 记录你想要打的补丁的ID 比如说: git log commit 4ff35d800fa62123a28b7bda2a04e ...

  9. git: fatal: Not a git repository (or any of the parent directories): .git

    在看书 FlaskWeb开发:基于Python的Web应用开发实战 时,下载完源码后 git clone https://github.com/miguelgrinberg/flasky.git 试着 ...

  10. 深入理解git,从研究git目录开始

    转发学习的啦. 似乎很少有人在读某个git快速教程的时候会说:“这个关于git的快速教程太酷了!读完了用起git来超级舒服,并且我一点也不怕自己会破坏什么东西.” 对git的初学者来说,刚接触git时 ...

随机推荐

  1. [Hadoop 周边] Hadoop技术生态圈

    Hadoop版本演进 当前Hadoop有两大版本:Hadoop 1.0和Hadoop 2.0. Hadoop1.0被称为第一代Hadoop,由分布式文件系统HDFS和分布式计算框架MapReduce组 ...

  2. 学习HTML5之新特性标签一览(详细)

    HTML5又2008年诞生,HTML5大致可以等同于=html+css3+javascriptapi.... so --->支持css3强大的选择器和动画以及javascript的新的函数 先来 ...

  3. 在VS2010中,引用了同一解决方案的另一个项目的dll,却不能正常调用(转)

    目前发现的原因是,dll的.net 版本比我的程序的高 dll用的.net 4  而程序用的.net 4 client profile 转载源:http://www.cnblogs.com/szyic ...

  4. Echart多图联动

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  5. 分享一个快速的Json(反)序列化开源项目 Jil

    我们不缺少JSON的序列化库,但我们缺少一个性能非常好的库,这对于网站来说非常重要.今天我发现了Jil. 他是开源的代码: https://github.com/kevin-montrose/Jil ...

  6. was7中文redhat6上安装出现中文乱码解决方案

    转:http://blog.csdn.net/w1985g/article/details/8789378 在rhel-server-6.1-x86_64上安装WebSphere 7时,安装界面出现中 ...

  7. Hibernate的generator属性之意义

    Hibernate的generator属性之意义 本文讲述Hibernate的generator属性的意义.Generator属性有7种class,本文简略描述了这7种class的意义和用法. Hib ...

  8. Noip2014 提高组 day1 T1· 生活大爆炸版石头剪刀布

    生活大爆炸版 石头剪刀布 描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一 样,则不分胜负.在<生活大爆炸>第二季第 8 集中出现了一种石头剪刀布的升级版 ...

  9. Servlet下

    HTTP简介 HTTP是 hypertext transfer protocol(超文本传输协议)的简写,它是 TCP/IP 协议集中的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...

  10. DotNetBar v12.1.0.0 Fully Cracked

    更新信息: http://www.devcomponents.com/customeronly/releasenotes.asp?p=dnbwf&v=12.1.0.0 如果遇到破解问题可以与我 ...