******************************************************************
本文为学习总结,没有深入的实践,可能有理解不周,文中资料参考自网络
******************************************************************
git是什么?
git是一种分布式版本控制工具。
什么是版本控制?
举个简单的例子来说:每当你要修改一个文件的时候,为了保证可以恢复到修改前的状态,我们一般采取的措施是,copy一份作为原始备份,然后在对文件进行修改。但是我们有通常会遇到很多混乱的情况让我们非常的头疼,比如我有一份hello.txt,经过n次修改后出现了hello1.txt,hello2.txt,hello3.txt等好多的版本,当我想要去找回我删除的某些内容时,需要挨个打开对比查找非常的麻烦,或者出现写着写着直接放弃hello3,直接在hello2上做 修改,于是又出现一个hello2_副本.txt,想要整理一下删除某些文件,又怕删除的东西还有价值;除此之外,如果hello.txt需要两个人一起处理,A从你这里copy了一份,进行编辑,你自己也继续进行编辑,结果最后进行整合的时候可想而知,非常的令人头疼。
所以版本控制工具就是为了解决这些问题,它可以帮你记录每一次的改动,不需要创建无数的备份,只需要关注每一次的改动就好了。
分布式的概念很容易理解,也就是说我们不必存在一个集中的服务来作为存储仓库,而是每一个参与者的电脑上都存储这工程的完整备份,每隔一段时间,交换一下彼此的修改,每个人就又了最新的版本。
git的产生
对于熟悉计算机知识的人来说,对于git的产生过程应该都不陌生。他就是由大名鼎鼎的Linux开发者Linus为了Linux的版本管理而开发的。
其中有趣的是,当时Linux开发者使用的是一个商业的版本控制工具免费为他们提供的,但是因为Linux开发者们都是一群开源的信仰者,不少人企图将该商业软件破解,结果被发现。于是人家收回了使用权限,据说linus一气之下用了两个多星期就写出了git的初始版本。
两个星期!!不得不服,有些人的存在就是为了重新定义牛逼二字。
创建仓库 create repository
repository,中文为仓库,非常的形象,就是git用来存储各干版本的仓库,又叫版本库。可以理解为一个文件夹。
1.创建空的目录
$mkdir myproject 创建myproject目录
2.初始化仓库
$git init 使用这个命令来将myproject创建为一个git管理的仓库,完成后,可以看到myproject目录下生成了一个.git文件,该文件用来记录仓库版本以及改动信息(不要自己随意改动)。这样我们就成功创建了版本库用来存储和管理我们的项目。
提交文件
1.创建文件并编辑内容
$vim start.txt 使用vim创建strat.txt文件,并在里面填写内容。注意:创建的文件一定在仓库目录下。否则git无法进行管理
$git status 查看git状态命令,可以看到文件名变为红色,表示该文件有改动,文件仍在工作区
2.add文件到缓存区
$git add start.txt 将文件由工作区添加到缓存区。
$git status 发现文件名变为绿色,表示文件被添加到缓存区。
3.commit到版本库
$git commit -m bababababa 使用该命令将缓存区中的文件全部提交到版本库。-m 后面是随意的字符串,主要对提交做出说明
4.log查看提交内容
$git log 查看提交
这里说明一下工作区,缓存区,版本库的区别,结合我自己的理解尝试举个不准确的例子说明一下:
工作区:编辑所在的区域,就像单独的一个作业本,你在上面写作业。
缓存区:暂存编辑完成的文件的区域,好比是书包,你每完成一门作业,就将这个本子放进书包中。
版本库:记录每次改动的仓库,好比是老师,你把你整理好的书包里面的作业内容全部交给老师。也就是说,工作区的文件需要单独添加到缓存区,而缓存区中的可以一次性提交。
删除文件
这里的删除指的是从版本库中删除文件,即commit过的文件。
1.$git rm 文件名 将文件取回缓存区
2.$git commit -m babababa 告诉git 删除了文件
更改恢复
1.$git cheakout --文件名 清除工作区的修改,恢复文件到最近一次add或者commit状态。
2.$git reset HEAD 文件名 将暂存区的暂存的修改拿回工作区,接着选择继续修改,或者选择1中清除修改。
3.$ git reset --hard 版本号 使用版本回退将工作区内容恢复到版本号对应的提交的内容。
常用命令
$git diff HEAD -- 文件名 比较当前工作区和最新提交的版本的区别
$git log 产看提交日志,包括查看提交信息以及提交id
$git status 查看工作区状态