概述

我们已经成功的添加了一个 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. IO流 总结一

    字符流: FileReader FileWriter BufferedReader BufferedWriter readLine(); 字节流: FileInputReader FileOutput ...

  2. 集成 Union Pay - 银联支付

    作者感言 前面已经把WeChat SDK的支付, AliPay SDK搞得七七八八了, 接下来就是银联支付的Union Pay SDK.最后:如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, ...

  3. 史上最用心的 iOS App 上架流程

    题记 麻痹起来嗨!看网上那么多的教程,依然在我心爱的爱屁屁在上架的时候遇到各种 J8 问题,最大的问题就是:Xcode 证书什么的,Provisioning Profile 什么的,Debug 什么的 ...

  4. 采购订单限价(包含阶梯价)ME_PROCESS_PO_CUST

    为了能管控到钱财的每个环节,公司要求采购订单需要使用物料限价,当有报价低于先前的价格时,在采购订单保存时,更新最低限价 BADI:ME_PROCESS_PO_CUST process~item里做限价 ...

  5. IKAnalyzer进行中文分词和去停用词

    最近学习主题模型pLSA.LDA,就想拿来试试中文.首先就是找文本进行切词.去停用词等预处理,这里我找了开源工具IKAnalyzer2012,下载地址:(:(注意:这里尽量下载最新版本,我这里用的IK ...

  6. C语言链表

    #include<stdio.h>#include<malloc.h>#include<stdlib.h> typedef struct Node{ int dat ...

  7. Java JDK 动态代理使用及实现原理分析

    转载:http://blog.csdn.net/jiankunking   一.什么是代理? 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理 ...

  8. EFCode First 导航属性

    首先谈谈自己对EF的接触的过程吧,最先接触EF只是因为EF支持从数据库把关系扒下来,可以省掉自己写Select.Update.Insert这些SQL语句,而且修改非常方便,后来在使用的过程中发现导航属 ...

  9. php 5.5.1 编译安装过程

    1.下载解压 wget http://au1.php.net/get/php-5.5.1.tar.gz/from/ch2.php.net/mirror tar zxvf php-5.5.1.tar.g ...

  10. 一个漂亮灵活的PHP图片验证码

    <?php class Imagecode{ private $width ; private $height; private $counts; private $distrubcode; p ...