git完全教程:003—Git版本管理(版本更新与回退)

更新版本

修改文件

之前已经创建了一个readme.txt,现在更新里面的内容

Git is a version control system.
Git is free software.The 1st update

此时输入指令git status
在这里插入图片描述
git status可以让我们时刻掌握仓库当前的状态

最后一句话告诉我们:readme.txt被修改了,但是还没有进行commit(提交)

查看修改内容

虽然我们使用git status指令能知道文件被修改,但是我们并不知道修改了什么。
比如春节后回去上班,已经忘了之前修改过什么,那么就需要
使用git diff指令

git diff readme.txt

在这里插入图片描述
从上面的输出我们可以看到,在最后一行我们添加了一段文字

更新并提交

我们通过git diff可以查看到修改内容,知道后我们就能够放心地提交给仓库。

第一步git add

git add readme.txt

没有任何输出,说明没有问题

在执行第二部git commit提交之前,我们再git status看看当前仓库的状态

git status

在这里插入图片描述
这里可以看到将要被提交的readme.txt文件
绿色表示工作区,下面一篇再说

第二步git commit

git commit -m "the 1st update"

在这里插入图片描述

最后git status查看状态
在这里插入图片描述
git告诉我们当前没有需要提交的修改,工作目录是干净的

版本回退

在版本回退之前,请大家做一个练习,再更新一个版本
readme.txt中修改为如下内容

Git is free software.The 2st update

添加到仓库的方法自行练习,忘了的话翻看以前的内容

  • 像这样不断对文件进行修改更新,然后不断提交到版本库当中。
    就像玩RPG游戏,每通过一关就会自动把游戏进度存盘,若某一关没有过,可以选择读取前一关的存档。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。

  • Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

查看更新历史

在准备游戏读档时需要查看一下所有的存档,若版本更新出现问题也需要查看之前所有的版本

这里我们自己做一个回顾

原始版本

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

第一次更新

Git is a version control system.
Git is free software.The 1st update

第二次更新

Git is free software.The 2st update

当然在工作中,我们没有办法向上面那样记得很清楚,毕竟工作中的代码有成百上千行。
怎么办?

使用git log
在这里插入图片描述

红框中是git commit -m "xxxxxx"引号中的日志

如果嫌输出的信息太多,那可以加上--pretty=omline参数:

git log --pretty=oneline

在这里插入图片描述
这样就清爽一些了
不过少了提交的人和邮箱号,还有更新时间

黄色的这一串都是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准.

为什么要有commit id(版本号)

可以通过版本号来选择回到的版本,即游戏存档

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

每提交一个新版本,实际上Git就会把它们自动串成一条时间线。如果使用可视化工具查看Git历史,就可以更清楚地看到提交历史的时间线:

在这里插入图片描述

版本回退

若想要跳转,那么就得先知道当前是哪个版本

在Git中:

  • HEAD表示当前版本
  • HEAD^表示上一版本
  • HEAD^^表示上上版本
  • HEAD~100表示上100个版本

现在,我们要将当前版本the 2st update回退到上一版本the 1st update,就可以使用git reset命令

git reset --hard HEAD^

在这里插入图片描述
--hard参数有何意义?我们放到后面再讲,现在请放心使用

再看看readme.txt里的内容

cat readme.txt

在这里插入图片描述
果然被还原了

回到回退之前的版本

如果回退之后后悔了,怎么办?
先查看git log
在这里插入图片描述
发现第二次更新消失了,就像是乘时光机回到过去返回不了未来,怎么办?

如果窗口没有关掉,可以往上找commit id,之前我的最新版本的commit id5aa1503e270a325654e435872e12c2769253e6e5

那么我们使用git reset --hard 版本号

git reset --hard 5aa15

在这里插入图片描述
其实版本号不用写那么全,写前几位就好了,Git会自动去找。
当然也不能只写一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

此时再看readme.txt
在这里插入图片描述
又回来了

如果找不到commit id怎么办?
Git提供git reflog来记录你的每一次命令
在这里插入图片描述
可以看到版本号
我们又能通过git reset --hard 版本号回去了

Git版本切换原理

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向the 2st update

┌────┐
│HEAD│
└────┘

└──> ○ the 2st update
      │
      ○ the 1st update
       │
      ○ wrote a readme file

改为指向the 1st update
┌────┐
│HEAD│
└────┘

│     ○ the 2st update
│     │
└──> ○ the 1st update
       │
      ○ wrote a readme file

指向更改后,Git会顺便将工作区的文件更新。
即你让HEAD指向哪个版本,你就把版本定位在哪。

猜你喜欢

转载自blog.csdn.net/qq_28258885/article/details/114982509