git学习 版本转换(第二天)

早上菜鸟写了深入浅出计算机组成原理,感觉照搬的果然还是没自己写有意思,所以下午菜鸟就来学习git了,自己打,感觉nice φ(゜▽゜*)♪

话不多说,直接上

文章目录

    • git时光穿梭
      • git status(仓库当前状况)
      • git diff(查看不同)
      • git log(查看版本)
      • 版本回退(优点)
      • 版本前进(缺点)

git时光穿梭

上一次,我们已经成功地把一个文本文件加入到了git,这里菜鸟希望,各位不看昨天的,然后再创建一个文本文件上传到git仓库。

如果你成功了,那么可以接着往后看,没成功,请回到 上一讲 复习

好了,现在进入今天的知识

git status(仓库当前状况)

读者可以任意选择你已经上传到git仓库的一个文本文件,然后修改(:Windows不要用记事本),菜鸟改成了如下:

I come git first time!
git is a free!
three try change!
try diff!

现在,运行 git status ,菜鸟的运行结果:

On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        modified:   gitone.txt

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

git status 命令可以让我们时刻掌握仓库当前的状态(这意味着,咳咳咳,大家要多用 (* ^ _ ^ *) ),上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改

git diff(查看不同)

不过 git status 命令虽然能告诉你,文件被修改了,但是却不知道修改了哪里,如果你忘记了上次修改的什么,你应该怎么办呢?

这时候就该 git diff 上场了,diff就是different的缩写,所以顾名思义,就是两次的差别!

diff --git a/gitone.txt b/gitone.txt
index 4834687..28da96d 100644
--- a/gitone.txt
+++ b/gitone.txt
@@ -1,4 +1,4 @@
 I come git first time!
-git is a free safeware!
+git is a free!
 three try change!
 try diff!
\ No newline at end of file

不同的修改显示不一样,读者可以随意发挥!

这时候,需要做的就是将新改的,给传入git仓库了,还是两步走

git add gitone.txt

这时先不要着急,记住上面我说的了吗? git status 得多用,这时候输入,显示结果:

On branch master
Changes to be committed:
  (use "git restore --staged ..." to unstage)
        modified:   gitone.txt

git status 告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了。

这里提交菜鸟就不展示了。

提交后,依旧是 git status ,显示为:

On branch master
nothing to commit, working tree clean

Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的

git log(查看版本)

这里,我们已经有两个版本,如果下去还自己弄了的话,那就有很多版本。

那么我们怎么产看版本呢 ?没错,就是 git log

输入 git log 后,显示如下:

commit d696468860aab706dfb385ea4c85a11a0e37d86f (HEAD -> master)
Author: ******************
Date:   Wed Jul 1 15:51:10 2020 +0800

    read boke to change

commit d0e121c1329a54c6224a45c1a0a4952a9d420e40
Author: ******************
Date:   Wed Jul 1 15:39:34 2020 +0800

    add four line

commit ff8a5d3a208ac8f170ee00806205cc997824ad23
Author: ******************
Date:   Wed Jul 1 15:09:00 2020 +0800

    add three line

commit 5222f9d5ca0ea5ef06bf8b43d74ae1ea066d30c9
Author: ******************
Date:   Wed Jul 1 15:04:59 2020 +0800

    add one line

commit c471641b05472dda4ae61331250062da0844ce5a
Author: ******************
Date:   Mon Jun 29 19:25:28 2020 +0800

    2020 6 29

(这里菜鸟因为隐私关系,将Author弄成了****,其实是你一开始输入的user name 和 user Email)

注意:这里需要读者注意的是,如果版本少还好说,其不会出现问题,一但版本多了,其会出现没有显示的部分,这个时候就应该按 enter 键,到最后 git bash 上出现 END 时,输入 q 就能退出!也可以直接输入 q 退出,但是有一部分你会看不见!

git log 命令显示从最近到最远的提交日志,我们可以看到5次提交,最近的一次是read boke to change,上一次是add four line,最早的一次是2020 6 29。

如果感觉 git log 显示的太过臃肿,读者可以加上–pretty=oneline参数

git log --pretty=oneline

友情提示:你看到的一大串类似5222f9…的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和菜鸟的肯定不一样,以你自己的为准。

为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

版本回退(优点)

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交d696468860aab706dfb385ea4c85a11a0e37d86f(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^ ,上上一个版本就是HEAD^ ^ ,当然往上100个版本写100个 ^ 比较容易数不过来,所以写成HEAD~100。

这里菜鸟建议,直接记下两个就好:一个是HEAD^;另一个就是HEAD~XX。(其实还可以通过版本号跳回,具体见下面的版本前进)

现在我们要把当前版本回退到上一个版本,需要用到 git reset 命令,显示如下:

git reset --hard HEAD^
HEAD is now at d0e121c add four line

注意

  1. –hard 参数有啥意义?这个后面再讲,现在读者先放心使用
  2. 如果是版本号的方式回退,而且正好有两个版本的的版本id一致,那么会跳转到离新版本最远的的一个,这里在恢复分支中会有用!(7月11日、7月14日补)
asus@XXX MINGW64 /e/Git_warehouse (master)
$ git reflog
6be4087 (HEAD -> master) HEAD@{0}: merge dev: Fast-forward
80b9641 (origin/master) HEAD@{1}: checkout: moving from dev to master
6be4087 (HEAD -> master) HEAD@{2}: commit: remove gittwo
80b9641 (origin/master) HEAD@{3}: checkout: moving from master to dev
80b9641 (origin/master) HEAD@{4}: commit: try github push
65f07fd HEAD@{5}: commit: add abc in text
ae3edd9 HEAD@{6}: commit: remove 123

asus@pbw MINGW64 /e/Git_warehouse (master)
$ git reset --hard 80b9641
HEAD is now at 80b9641 try github push

这个时候你会发现notepad++,会说文件内容以改变,当你点击是,就会看到上一个版本的内容。(也可以直接输入 git log ,你会发现最近的一版不会显示了;也可以直接使用cat < filename > 读取文件内容)

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:
git学习 版本转换(第二天)_第1张图片
改为指向add distributed:
git学习 版本转换(第二天)_第2张图片
然后顺便把工作区的文件更新了。所以你让HEAD指向哪个版本号,你就把当前版本定位在哪。

版本前进(缺点)

这里有个git的缺点得告诉大家,那就是可以回到过去却没办法穿梭回未来,通过上面的 git log 就可发现,因为根本不会出现最近的版本,最近的版本已经变成了上一个版本!

那这个时候咋回去?那就只能通过版本号了

git reset --hard d69646(版本号)

注意:版本号,不要写太少,不然可能有重复,而使git无法确定具体是哪一个版本!

现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到某个版本时,再想恢复到最新版,就必须找到最新版的commit id。Git提供了一个 命令git reflog 用来记录你的每一次命令(只有reset和commit,即:对版本库的操作):

git reflog
ff8a5d3 HEAD@{1}: reset: moving to HEAD^
d0e121c HEAD@{2}: reset: moving to HEAD^
d696468 (HEAD -> master) HEAD@{3}: commit: read boke to change
d0e121c HEAD@{4}: commit: add four line
ff8a5d3 HEAD@{5}: reset: moving to ff8a5d
c471641 HEAD@{6}: reset: moving to HEAD~2
ff8a5d3 HEAD@{7}: commit: add three line
5222f9d HEAD@{8}: commit: add one line
c471641 HEAD@{9}: commit (initial): 2020 6 29

幸运的是,你的commit被记录了,所以你可以看见你最新版本的版本号:d696468。

你可能感兴趣的:(git,git,git版本回退与前进,git产看仓库状况,git产看修改,git查看版本)