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

目录

  • 更新版本
    • 修改文件
    • 查看修改内容
    • 更新并提交
  • 版本回退
    • 查看更新历史
    • 为什么要有`commit id`(版本号)
    • 版本回退
    • 回到回退之前的版本
    • Git版本切换原理

更新版本

修改文件

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

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

此时输入指令git status
git完全教程:003—Git版本管理(版本更新与回退)_第1张图片
git status可以让我们时刻掌握仓库当前的状态

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

查看修改内容

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

git diff readme.txt

git完全教程:003—Git版本管理(版本更新与回退)_第2张图片
从上面的输出我们可以看到,在最后一行我们添加了一段文字

更新并提交

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

第一步git add

git add readme.txt

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

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

git status

git完全教程:003—Git版本管理(版本更新与回退)_第3张图片
这里可以看到将要被提交的readme.txt文件
绿色表示工作区,下面一篇再说

第二步git commit

git commit -m "the 1st update"

git完全教程:003—Git版本管理(版本更新与回退)_第4张图片

最后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完全教程:003—Git版本管理(版本更新与回退)_第5张图片

红框中是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完全教程:003—Git版本管理(版本更新与回退)_第6张图片

版本回退

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

在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
git完全教程:003—Git版本管理(版本更新与回退)_第7张图片
发现第二次更新消失了,就像是乘时光机回到过去返回不了未来,怎么办?

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

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

git reset --hard 5aa15

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

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

如果找不到commit id怎么办?
Git提供git reflog来记录你的每一次命令
git完全教程:003—Git版本管理(版本更新与回退)_第8张图片
可以看到版本号
我们又能通过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指向哪个版本,你就把版本定位在哪。

你可能感兴趣的:(Git完全教程,git,github)