在Github上用Jekyll架站,有时不免提交一些代码或内容有误,以致无效更新。这篇文章简介如何使用git reset命令回退到错误前的状态。
问题
在Github上用Jekyll架站,有时不免提交一些代码或内容有误,以致无效更新。
举例来说,这网站的编辑提交史(Commit History)在2017/12/25当天有数次编辑提交导致错误,Github无法解译。那些编辑提交会出现一个红色的小叉叉,而不是正确的绿色小勾勾。
鼠标悬停到那些红色,就可以查看错误的反馈。
要是你不想在Github的编辑提交史留下这样的错误记录,而你又没有其他协同工作者的话,其实是可以采取git reset的方式回退到错误前的状态。
在使用git reset前,还是先理解一下基本的概念。
reset 还是 revert
若你是第一次使用Git命令列,或着是第一次使用git reset
,有必要理解一下 git reset
和git revert
的差别。
简单说,git reset 是不留任何编辑记录的回退,而git revert则是留有编辑记录的回退。
举例来说,若当下的编辑记录史是;
版本1 → 版本2 → 版本3
若我使用git reset
回退到 版本2 ,编辑记录会变成
版本1 → 版本2
若我使用git revert
回退到 版本2 ,编辑记录会变成
版本1 → 版本2 → 版本3 → 版本2
两种的结果都会让最新的版本处於版本2的状态,但一个是不留记录(git reset
),另一个则留了(git revert
)。
一般来说,特别是协同工作,都会用git revert,这样比直接不留记录的回退礼貌一些些。但若这只是你一个人做的小项目,又有一些比较小的小错误要回退,不留记录也是可以的。
命令列操作
首先要开启命令列,切换目录至你本地的项目,如mygithub.github.io。
若你有用Github Desktop的话,可以点进去项目後按Ctrl+\`
,或着按菜单Repository – Open in Command Prompt
一般步骤如下:
- 使用git push -f origin HEAD^:master 将HEAD指向当前工作的master
- 使用git reset –hard SHA长码 将代码重置回退到SHA长码所代表的版本号
执行效果如:
C:\Users\me\Documents\GitHub\mygithub.github.io>git push -f origin HEAD^:master
Everything up-to-date
C:\Users\me\Documents\GitHub\mygithub.github.io>git reset --hard 7cc655458bdb8d878a5f95aeeab5b9bb0837fdbf
HEAD is now at 7cc6554 CSS layout improvement
C:\Users\me\Documents\GitHub\mygithub.github.io>git push --force
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/mygithub/mygithub.github.io.git
+ 4d39ab4...7cc6554 master -> master (forced update)
看到HEAD is now at SHA短码 ....
字样代表HEAD指向到该版本。
SHA码是啥
简单说,在Git中,每个Commit 编辑提交记录有一个代码,确保版本号不会混淆。