继续上篇文章的本地git使用流程
4、跟踪一个文件之后,git就可以记录它的每次变动(即版本),然后根据需要回退或前进到某个版本。对一个文件做出修改后,最重要的是及时提交此次修改,输入git commit 如图:
(注意每次提交前要先add。git commit后出现下图)
(这里经过了修改,因为git默认的编辑器是nano,个人感觉不好用,于是用git
config --global core.editor vim命令把默认编辑器改成了vim)
第一行是要为本次提交输入一个说明或标记之类的东西,以便别人review的时候快速知道你这次提交到底干了什么,我随便写了一个:
然后输入:wq退出,如下:
会显示本次提交的状态。
(1)如果嫌每次都要打开vim麻烦,可以直接把提交说明放在-m参数后面,如下:
(2)更进一步,如果还嫌每次修改都要add麻烦,可以添加-a参数,如下:
这个参数会把从上次提交到现在之间所有的修改一次性全部提交,而且不必再add。
(3)如果上次的提交信息写错了,那么 --amend参数给你一个改错的机会:
(原来的提交信息是fourth)
(输入git commit --amend后会打开vim,我把信息修改成fourth_new,保存退出)
(新的提交信息就成了fourth_new)
注意,这只能修改提交信息,不能修改提交内容本身。
5、查看提交历史,使用git log命令可以查看所有的历史提交,它使用less命令的方式列出所有的提交说明等信息,如下图:
可以看到显示的顺序是倒序的,从最近一次提交开始,越往下的提交越”旧“。如果只想查看最近n次提交,而不是全部,可以像下面那样添加一个参数:
(只列出了最近两次提交信息)
仅仅git log列出的信息还是图样图森破的,想要进一步查看详细信息,可以使用-p选项,如下:
另外还有一个--stat选项,用来统计一些信息,主要是其中添加和移除的行数,并在最后列出所有增减行
数小计:
git log还有很多选项,它们的妙用自己慢慢研究吧。。
6、回退版本:git reset命令。这是非常重要的一个命令,对我来说,它就是我的git后悔药,后悔药啊亲~
(1)前面说过git checkout file命令的作用,即撤销本次对文件所做的修改,但这里有个前提,就是没有git add此次修改,否则git checkout是不起作用的,如下:
(如图,git checkout code.c没起作用)
要想让这个命令起作用,首先要撤销刚才的add命令,方法如status提示中给的那样:
然后checkout才起作用,换句话说,git checkout只能作用于那些未被跟踪的修改:
(2)想要让文件恢复到上次提交时的面目,如下图,我们看到了最近两次提交:
当下,code.c的样子就是fourth_new提交的样子,那么怎样让它变成third提交的样子呢?如下:
哈哈,成功!这里要注意的是,HEAD^,这里HEAD指的就是最新一次提交,加上一个^表示上次提交,两个表示上上次提交。。。那最多能加多少个呢?呃,我表示不清楚,不过加太多的话,你也数不清了对不?所以,如果想回退到某个非常靠前的版本,其实可以直接用commit后面长长的ID直接替换掉HEAD,如下:
(这是最近三次提交,下面演示直接退到second版本)
搞定~~不过由--hard你也看出这个方法很暴力,second之后的那几次提交全被抛弃了。。