之前已经创建了一个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 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^
再看看readme.txt
里的内容
cat readme.txt
如果回退之后后悔了,怎么办?
先查看git log
发现第二次更新消失了,就像是乘时光机回到过去返回不了未来,怎么办?
如果窗口没有关掉,可以往上找commit id
,之前我的最新版本的commit id
是5aa1503e270a325654e435872e12c2769253e6e5
那么我们使用git reset --hard 版本号
git reset --hard 5aa15
其实版本号不用写那么全,写前几位就好了,Git会自动去找。
当然也不能只写一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
如果找不到commit id
怎么办?
Git提供git reflog
来记录你的每一次命令
可以看到版本号
我们又能通过git reset --hard 版本号
回去了
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
指向哪个版本,你就把版本定位在哪。