使用Git的一大好处就是,当我的程序在改动的过程中发生了难以修复的错误,我们可以透过版本回推来还原。承接上一章节,我们先来建立多个commit。
输入git log --gragh
如上图,我们新提交了3个commit,分别是新增修改1、新增修改2、把修改1改成修改3。HEAD->MASTER
代表我们MASTER HEAD目前处於最新的"修改1变成修改3"的commit下。
就像是在一篇文章讲的,我们在修改、commit有分为三大区块:工作区、缓冲区、归档区。因此我们回推也可以选择回推不同的程度。下达git reset <不同回推程度> <哈希(前七码)>
即可进行回推。
(哈希可由reflog查看)
git reset --soft <哈希>
# 还原commit (但还是有被add)
# --soft只回原归档区
git reset --mixed <哈希>
# 然後查看git log 会发现之前提交的消失了
# 但是程序码没有变动(尚未回滚)
# --mixed 是同时对归档区与缓冲区做回滚。
# 所以此时modify尚未add
git reset --hard <哈希>
# 还原commit全部,包含程序码
# --hard还原归档区、缓冲区、工作区
soft、mixed、hard分别代表三种不同的回推程度。具体可以看下图:
实际来下达git reset --mixed f81792d
(回到修改二),可以看到程序还原到尚未add的状态。
git revert <哈希>
同样的能够回复程序,但是逻辑不太一样。来实际git revert f81792d(修改二)
,这样就会把修改二的东西都回推掉,类似hard模式。
回朔的逻辑是用一个新的commit来去覆盖之前的修改
revert可以用在修改前辈的程序上,想要回推前辈的东西,但是又不敢乱来。利用revert可以保留前辈之前的commit。不过基本上不常用啦,如果真的要保留,应该要用checkout一个新的分支,不过这个我们就保留到明天说吧。
<<: [重构倒数第26天] - 你可能不需要Vuex (You might not need Vuex)
Q : wi10 看不到wifi 在cmd 输入 netsh wlan set hostednetw...
接下来要讲的是指标(pointer),其实之前在讲阵列的时候,就已经有出现过 pointer 的应用...
在现今的 Web 应用中,要建构一个稳定的大型系统,能够处理 High Concurrency 的...
该文章同步发布於:我的部落格 今天我们要介绍 Mock 军团的最後一员,也就是 Spies 这个用...
用List实现多层容器 何谓 多层容器 ?我们前面说过List可以存放 『任意型别』 ,其中也包...