git学习一
前几天写完那个scrapy实例,在上传到我们实验室的github仓库上时出现了一些问题,在请教同学后,得以解决,也加深了对git的理解,关于git的介绍,这里就不多说了,网上很多,廖大神的git教程(https://www.liaoxuefeng.com/wiki/896043488029600)也是非常的好.没下载git的同志们,请自行百度(自己太菜,哭笑。。。),以下命令,都是在已经安装好 git的基础上进行的。
0x01:创建git仓库
首先找到一个目录(路径中不要含有中文),然后在此处打开git bash here,出现如下界面。你可以把它想象成windows的命令窗,所有的git命令都可以直接在这里输入运行。
然后我们使用mkdir命令创建一个learngit目录,并进入到这个新建的目录,pwd命令是显示当前目录的绝对路径。操作如下:
0x02:生成git仓库
通过git init命令生成仓库,操作如下:
这样,我们就我刚才创建的一个普通的目录,变成了一个git仓库,里面会多一个.git的目录(隐藏文件,可以用ls --ah命令查看),这个目录就是git用来跟踪管理版本库的。
0x03:把文件添加到版本库
之所以要把文件添加到版本库,就是为了能够对文件进行版本管理,这一步是关键,要不git也无法发挥它的作用了。
在learngit下创建一个名为readme.txt的文本文件,在里面写入一下内容:
Git is a version control system. Git is free software.
然后通过下面两条命令将文件上传到版本库:
git add readme.txt //无返回信息 git commit -m "wrote a readme file" //-m参数后面加有效注释 返回信息:1 file changed
:1个文件被改动(我们新添加的readme.txt文件);2 insertions
:插入了两行内容(readme.txt有两行内容)。
再解释这两个命令之前,我们先了解一下git的工作区、暂存区、master分支。
工作区就是在电脑上能看到的目录,比如我们创建的这个learngit文件夹,
Git的版本库里存了很多东西,其中最重要的就是称为stage的暂存区,还有Git为我们自动创建的第一个分支master(它是老大),你可以把它们三的工作关系想象成“你(工作区)的作业(修改的文件)->学委(暂存区)->(老师)”,修改完文件,就是你写完了作业,git add,把你的作业交给学委,git commit,,学委把你的作业交给老师,老师记录你每一次作业的改动。
git add 把工作区的文件提交到stage暂存区;
git commit 把stage暂存区的文件提交到master分支。
0x04:查看状态和修改信息
现在我们修改一下readme.txt文件,内容如下:
Git is a distributed version control system. Git is free software.
然后使用git status命令查看当前状态:
上面的命令输出告诉我们,readme.txt
被修改过了,但还没有准备提交的修改。
知道文件被修改了,好奇心驱使我们想知道那个地方被修改了,git diff命令可以帮到我们:
git diff
顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个distributed
单词。
然后我们就可以使用git add readme.txt git commit -m "XXXXX"来提交修改后的readme.txt文件了。
0x05:查看日志
现在,我们对readme文件再做一次修改,内容如下:
Git is a distributed version control system. Git is free software distributed under the GPL.
然后同样通过两个命令提交。现在,我们一共对readme文件做了三次改动,第一次创建,第二次在第一行增加distributed,第三次在第二行增加distributed under the GPL。git帮我们记录了每一次的文件改动,我们可以用git log命令查看:
最上面是最近一次的修改,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数:
每一行,记录了一次文件改动,每一行的签名的一串字符,是该版本对应的版本号,在版本回退的时候回用得到。
0x06:版本回退
来想这样一个问题,我们想让readme这个文件夹回退到第二个版本该怎么办呢?一个粗暴的办法是直接把readme里面的内容改回到第二个版本的内容,然后再同个add和commit命令提交到master。其实完全不用,git提供了强大的版本回退功,首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100,实际操作如下:
查看日志,可以看到已经回退到第二个版本了。
另外,我们在回退回来之后,还可以再回退回去,就是说你从二十世纪回到十九世纪,还能从十九世纪回来。还记得上面我们说的那个版本号嘛? --hard参数不仅可以跟HEAD^,还可以跟某个版本号,这样我们就可以回到readme的第三个版本了。
查看readme文件,就会发现已经回退到第三个版本了。(注:每个人的版本号都是不一样的,一定要加自己的版本号)
现在,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id
怎么办?
在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^
回退到add distributed
版本时,再想恢复到append GPL
,就必须找到append GPL
的commit id。Git提供了一个命令git reflog
用来记录你的每一次命令:
找到了版本号,就可以回退到我们需要的那个版本了。
(ps:本人太菜,若有错误的地方欢迎大佬随时责骂。。。。xixixii)