美文网首页程序员成长励志手把手教你学git
有关Git那些事儿(四)------穿越历史与未来

有关Git那些事儿(四)------穿越历史与未来

作者: 栗子西西 | 来源:发表于2019-01-06 22:12 被阅读6次

上一小节我们学会了如何修改文件,并提交到Git版本库中。我们再练习一次,修改love.txt文件如下:

I love you so much as the mouse like rice.
Do you know?
Every day

之后提交:

git add love.txt
git commit -m "append"

命令行返回如下:

[master 37ae842] append
 1 file changed, 1 insertion(+)

这样频繁地修改文件、提交文件到版本库的过程,如同玩单机版RPG游戏时,我们在打BOSS之前会手动存盘,以防万一被杀掉,可以从最近的记录开始。Git也是如此,修改到一定程度可以手动保存,利用commit这个命令。如果文件改乱了,还可以从最近的一个commit恢复,而不是从头开始。

现在,我们想查找love.txt中一共修改了几次,我们可以利用git log命令查找历史。

git log

命令行返回如下信息:

commit 37ae8429ec61ed6e43e5251df9ed729f831e7544 (*HEAD -> master*)
Author: xxlquanrou <xxlquanrou@163.com>
Date:   Sun Jan 6 14:05:41 2019 +0800

    append

commit 664f71e56621d229f2d98da0801aa3b1cf0c91ea
Author: xxlquanrou <xxlquanrou@163.com>
Date:   Sat Dec 29 22:39:30 2018 +0800

    add a sentence

commit b372d91bb9765311ce5d31bb2d1b083902a2244c
Author: xxlquanrou <xxlquanrou@163.com>
Date:   Fri Dec 28 23:26:12 2018 +0800

    a love song

我们从上面的信息中可以知道,共提交了3次修改,最近的一次是append,上一次是add a sentence,第一次是a love song

友情提示:上面类似37ae8429ec61e...的是commit id(版本号),是SHA1计算出的非常庞大的数字,16进制表示,具有唯一性。另外,你的跟我的肯定不一样.

Git中,HEAD相当于C语言中的指针,指向当前版本,此时指最新提交的37ae842,上一个版本是HEAD^,上上一个版本是HEAD^^,依次类推,50个版本可以写50个^,不过不太容易数,可以写成HEAD-50

现在,把当前版本append退回到上上一个版本a love song,可以使用git reset命令:

git reset --hard HEAD^^

命令行回复信息如下:

HEAD is now at b372d91 a love song

现在使用cat命令,查看love.txt中的内容,是不是回到了版本a love song

cat love.txt

命令行回复:

I love you as the mouse like rice.

果然回到了第一次”遇见“的地方~

我们可以用git log命令查看一下现在版本库的情况:

git log

命令行回复如下:

commit b372d91bb9765311ce5d31bb2d1b083902a2244c (*HEAD -> master*)
Author: xxlquanrou <xxlquanrou@163.com>
Date:   Fri Dec 28 23:26:12 2018 +0800

    a love song

仔细对比,发现中间的两处修改的”存根“不见了,感觉像穿越回古代,回不去了!肿么破?

莫急。只要别手贱将刚才的命令行窗口关闭,就还有补救的办法。例如,想找回最近修改的那个版本apend,先找到它的commit id版本号37ae84,然后使用git reset —hard命令可以回到现代:

git reset --hard 37ae84

版本号没必要写全,Git可以根据前面几位自动判断。

命令行回复如下:

HEAD is now at 37ae842 append

再次查看love.txt中的内容:

cat love.txt

命令行回复如下:

I love you so much as the mouse like rice.
Do you know?
Every day

哈哈,我胡汉三又回来啦~

假如,你回退到了某个版本,关掉了电脑,过了几天又想回到最新的版本,你不知道此版本的commit id,可以使用git reflog命令查看你的每一次命令:

git reflog

命令行回复如下:

37ae842 (*HEAD -> master*) HEAD@{0}: reset: moving to 37ae84
b372d91 HEAD@{1}: reset: moving to HEAD^^
37ae842 (*HEAD -> master*) HEAD@{2}: commit: append
664f71e HEAD@{3}: commit: add a sentence
b372d91 HEAD@{4}: commit (initial): a love song

从上面可以看到,哪个版本的id号都是一目了然的。

现在的你,可以在现在和过去之间随意穿梭啦~

课后小结来啦:

  1. HEAD指向的是当前版本,是一个指针。可以使用命令git reset --hard commit_id进行版本之间的穿越,也可以使用相对关系git reset --hard HEAD^进行版本之间的转换。
  2. 想回到过去,使用git log指令可以查看历史命令,确定想要回到历史哪个版本(针对当前版本来说)。
  3. 想穿越到未来,使用git reflog命令可以查看历史命令,确定要回到未来的哪个版本(针对当前版本来说)。
  4. 查看当前版本中文件内容,使用指令cat <fileName>

本小节到此结束,预知后事如何,且听下回分解哈~

相关文章

  • 有关Git那些事儿(四)------穿越历史与未来

    上一小节我们学会了如何修改文件,并提交到Git版本库中。我们再练习一次,修改love.txt文件如下: 之后提交:...

  • 有关Git的那些事儿(一)

    关于git,大家应该都听过吧。至少,github应该是有所耳闻吧。惭愧的是,之前的我,使用过github,却完全丈...

  • 有关Git的那些事儿(二)

    上一节我们安装好了Git,这一小节开始进入正题。 话说,Git里有一个名叫repository的东西,翻译成中文名...

  • 有关Git的那些事儿(三)

    上一小节中,我们介绍了如何创建仓库,以及如何把文件提交到仓库让管理员老大哥管理。至此,我们有了自己的仓库,仓库里也...

  • 有关Git的那些事儿(六)—修改

    Git管理的是修改,而非文件本身。增加、删除、甚至是创建新文件都是修改。 Git既可以管理修改,也可以撤销修改。 ...

  • 历史与文学那些事儿

    历史人物一般都会有三种形象:历史形象,文学形象,民间形象。 1. 历史形象,一般是以正史为主,其他史料为辅。但正史...

  • 今日冬至,你知道与冬至日有关的那些事儿吗?

    #DAY05:冬至日的那些事儿,你知道吗?# 今日冬至,你知道与冬至日有关的那些事儿吗? 01 冬至寒疟似虎…… ...

  • 历史的价值

    我们看两个被广泛认同的概念: 不知道历史,你就不会知道未来将去那里; 未来只与现在有关,与历史无关。 历史告诉我们...

  • 与英语有关的那些事儿

    小学三年级的时候,刚接触英语,那时候就觉得能说句英语是件很牛逼的事情,每天放学后追在邻家高年级姐姐屁股后面,问问什...

  • 与灵感有关的那些事儿

    关于灵感这个话题,我在前面一篇日更里面提过寥寥数语,大概是两个多月前的文了。 灵感,按我自己的理解,就是一种...

网友评论

    本文标题:有关Git那些事儿(四)------穿越历史与未来

    本文链接:https://www.haomeiwen.com/subject/ipperqtx.html