廖雪峰老师Git教程知识整理(2.1)-时光机穿梭

首先看一下a.txt文件的内容

studeyGit Make me Happy!!! 

接下来对文件进行修改

studeyGit Make me Happy!!!
Git is Good 

我们可以使用下面的命令进行查看结果git status

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   a.txt

no changes added to commit (use "git add" and/or "git commit -a")

上面的命令可以使我们时刻掌握仓库当前的状态。可以看出文件已被修改但是还没有准备提交的修改。
我们可以使用下面命令查看修改的内容git diff

diff --git a/a.txt b/a.txt
index b384108..3d042d2 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1,2 @@
-studeyGit Make me Happy<A3><A1><A3><A1><A3><A1>
\ No newline at end of file
+studeyGit Make me Happy<A3><A1><A3><A1><A3><A1>
+Git is Good
\ No newline at end of file

提交修改和添加文件到版本库一样也是两步。
git add a.txt
查看状态git status

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   a.txt

可以看出已经是待提交状态了
接下来我们提交git commit -m "second commit"

[master 89e3350] second commit
 1 file changed, 2 insertions(+), 1 deletion(-)

查看状态git status

On branch master
nothing to commit, working tree clean

工作目录是干净的了

1.版本回退

我们不断的对文件进行修改,如果后悔了想回到以前的某个版本怎么办?
首先本例子中目前只有两个版本,但是在实际开发中有成千上万个版本,到底回到哪个版本可怎么办?我们可以使用git log 命令查看每次的提交日志

commit 89e3350cc522e9f343018056fbaec50409ecbc5e (HEAD -> master)
Author: yz <357823669@qq.com>
Date:   Tue Jan 23 16:27:42 2018 +0800

    second commit

commit 6a46a5a0eebc19b7d6cfc2ce05e623a082a125af
Author: yz <357823669@qq.com>
Date:   Tue Jan 23 15:41:30 2018 +0800

    first commit

可以看出我们的提交信息以及提交备注我们可以加上--pretty=oneline 参数进行格式化

89e3350cc522e9f343018056fbaec50409ecbc5e (HEAD -> master) second commit
6a46a5a0eebc19b7d6cfc2ce05e623a082a125af first commit

好了 有了日志信息中的版本号(采用SHA1算法生成)我们就可以回退到以前的任何版本了
另外HEAD 代表当前版本 HEAD^ 代表上一个版本 以此类推 但是100个版本怎么办呢?我们可以使用 HEAD~100 来表示
接下来我们可以使用 git reset --hard HEAD^ 或者 git reset --hard 6a46a回退到上个版本
这里版本号我们不用写全 Git会自动去找 当然也不能写一两位HEAD is now at 6a46a5a first commit 已经回退成功了。(备注:git reset --hard HEAD^ 在cmd 中需要 将 ^ 加上双引号 "^" 因为^ 是特殊字符)

commit 6a46a5a0eebc19b7d6cfc2ce05e623a082a125af (HEAD -> master)
Author: yz <357823669@qq.com>
Date:   Tue Jan 23 15:41:30 2018 +0800

    first commit

可以看出最新一次的提交记录已经没有了,so 我们怎么从过去回来呢 (最新版本的id没有了呀)
我们可以使用git reflog 命令查看我们每次的提交命令去找到最新版本的版本号,从而回到最新版本

6a46a5a (HEAD -> master) HEAD@{0}: reset: moving to 6a46a5a0eebc
89e3350 HEAD@{1}: commit: second commit
6a46a5a (HEAD -> master) HEAD@{2}: commit (initial): first commit

git reset --hard 89e3350 HEAD is now at 89e3350 second commit 好了 我们又回到最新版本
了 因为在每次时光穿梭的时候只是代表当前版本的HEAD 指针进行移动 所以速度是非常快的

2.暂存区与工作区(用了大量廖老师的图 )

Git与其他版本控制不同之处就是暂存区的概念
工作区(Working Directory)比如我的studygit文件夹就是一个工作区
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
这里写图片描述
之前我们说的git提交文件到版本库分为两步
第一步:git add 将文件添加到缓存区
第二步:git commit 将缓存区的文件全部提交到当前分支
当我们创建版本库的时候就会自动创建master 分支
下面举个例子
首先我们修改a.txt 内容 并新建一个文件c.txt
git status 查看当前状态

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   a.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        c.txt
no changes added to commit (use "git add" and/or "git commit -a")

可以看出a.txt 已经被修改了 c.txt 处于untracked 状态 说明是新添加的文件
使用git add a.txt c.txt 我们将文件添加到暂存区
查看状态

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   a.txt
        new file:   c.txt

这里写图片描述
可以看出文件已经添加到暂存区了
接下来我们提交文件git commit -m "third commit"
查看状态

On branch master
nothing to commit, working tree clean

这里写图片描述

工作区已经干净了 而且暂存区也没有了任何内容

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值