Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理,现在在企业中的使用率也是很广的。git是一个分布式的版本控制系统,不像以前的svn,svn是只能联网才能工作,就算修改了很少的一部分代码,都必须将该文件在继续上传到svn服务器,就算是局域网络,这样做也是很消耗时间的,在加上,如果svn服务器挂掉了,那么程序员都是无法工作的,而且如果svn服务器的数据丢失了,oh
my god!一切都得从头开始了,然而git就不是这样,他是一个分布式的版本控制系统,即我们每一个本地的主机都是一个完整的库,虽然我们也是需要将修改的文件在上传的服务器的,但是却有诸多的安全性。git是linux和核心创始人利用一周的时间开发出来的。
首先需要安装git,先来看看linux下的安装方式:
在linux命令行下,我们可以试着先输入git,看看有没有安装git,如果系统提示没有安装,那么在命令行下:sudo apt-get install git ,这样既可完成git的安装工作。如果这样不能安装的话,应该是linux的版本比较老。可以试着输入sudo
apt-get install git-core 来完成安装。
在windows下,有一个一键安装的git工具,叫做msysgit,可以去下载,然后基本上是一键安装的。git下载,
完成安装以后,会在桌边有一个git-core的快捷方式,如果没有的话,那么我们打开git的安装目录,手动打开也可以,打开该快捷方式,会出现如下图的界面:
可以看到输入git version,就可以看到我目前使用的git版本了。这也说明安装git成功了。安装完成以后,就需要设置我们的git了,用如下命令来进行设置:
git config --global user.name "用户名"
git config global user.email "email"
这里我的配置如下:
在配置好了git以后,我们就需要创建我们的版本库了。什么是版本库呢?版本库其实就是一个目录,git可以通过它,来管理我们的文件,包括了修改的添加的等等等等。
这里我在F:盘下新建一个目录用来学习git,"f:/gitlearn",然后再git-core的终端,输入git init ,这样一个空的版本库,就创建好了。如下图:
可以看到在该目录下多了一个.git文件,这个文件时隐藏文件,看不到也没关系,而且千万不能删除该文件。对于git来说,他可以管理跟踪文本文件,程序代码等文件的修改和各种改动,并且可以知道那个文件修改了什么,增加了什么。但是对于二进制文件,就不能那么准确了,git只能知道我们改动了那个文件,但是改动了那些地方,就无能为力了。
接上文,我们编写一个gitfirst.txt的文本文件,内容如下:
git is a good version control.
i like to learn it.
注意如果我们想要将该文件添加到git的版本库当中,那么必须将该文件放入到拥有.git文件的目录,或者他的根目录中,这样git才可以找到该文件。
接下来就是将gitfirst.txt添加到版本库了,分为两步:
第一步:
git
add gitfirst.txt
第二步:
git
commit -m "add a gitfirst file“
这样就完成了gitfirst.txt文件添加到本地的版本库工作:
这里我说明一下:git commit -m "", 这里-m的参数的意思就是添加的说明。 需要注意的是,将文件添加到git版本库当中,必须首先执行git add,然后执行git commit,才可以,git add只是将该文件添加到临时的中间目录当中,git
commit才是真正将该临时目录的文件添加到真正的版本库当中的。我们可以一次行的git add多个文件,然后一次性的通过git commit来完成提交。
总结:
通过git init来初始化一个仓库,然后再.git目录或者其子目录当中,输入更改或添加文件,然后执行git add 文件名,在执行git commit -m ”说明“ ,这样可以将文件添加到本地的版本库了。
接下来我修改gitfirst.txt文件,然后再将其添加进版本库当中,这里我添加了一句话,如下:
git is a good version control.
i like to learn it.
add a string git is free.
可以看到,和之前的文件相比,我添加了"add
a string git is free. " 这样一句话。首先通过git status,查看当前git库下那些文件被修改了,同样可以通过git diff看到详细的修改信息,包括哪一行修改了,添加了什么,删除了什么等。最后就是像之前那样,通过git add 文件名 以及 git commit -m "添加说明" 这样的方式,将其添加到版本库当中。
可以看到通过git diff可以看到详细的修改信息。
接下来问题来了,那么如果,我之前添加的那一句话"add a string git is free." 发现添加错误了,我需要回退到之前的版本,这下怎么办,别急,是可以的。这里为了验证,我先分别进行三次不同的添加:
第一次:
git haha
第二次:
git test
第三次:
git gaga
在这三次添加完成之后,可以通过,git log,查看我这几次包括之前的提交记录。
可以看到详细的提交记录,这里的"three" ,"two" ,”one“ 就是我通过git commit -m "说明" 这里的说明。如果我们嫌通过git log显示出来的信息太多的话,可以通过这样的命令:"git log --pretty=oneline",来显示,如下:
注意到每一次提交git都会自动为我们添加一大串我们不认识的字符,这是就是我们的commit id,git通过它来记录我们每一次的提交,我最后一次添加的是"git gaga",这样的字符串,如果我需要将其回退到之前的版本,可以这样做。
git reset --hard HEAD^
这里,我说明一下:HEAD 表示的是当前版本,HEAD^表示上一个版本,当然HEAD^^表示上上一个版本,那么如果需要回退到前20个版本怎么办呢??可以这酱紫:HEAD ~100
通过查看gitfirst.txt可以看到我们的文件回退到了上一个版本,这里我在回退的时候发现在window下的git-bash貌似不能复制,其实是可以的,如下图:
这样就可以复制粘贴了,哎,和ubuntu下比起来,还是稍微麻烦了一点,言归正传,我们再次通过git log --pretty=oneline查看当前的提交记录:
8aa4dec5b57c334da8a81361312deab1512a7265 one
1dbd2f7e16112559fe5c5004fb277fa01748ee58 add a string
579b28a5c26b83931f601469e71a2cb3c110b271 add a gitfirst file
发现确实回退了,这里由于我操作了两次git
reset --hard HEAD^ 的原因,所以直接会退到"one"的提交记录了。如果我有后悔了,我又想从现在的版本回退到最新的版本怎么办。我们可以通过这个命令来查看我们的git记录:git reflog
然后使用命令git reset --hard commit_id 来回到指定的版本。比如:我想回到"three"的最新版本,该怎么操作呢???"git reset --hard 2d223ec" ,这样过后,就可以回到最新的版本了。查看文件内容发现确实回到three的版本了。
总结:
通过git reset --hard commit_id 可以回到任何一个版本
通过git log可以看到git的提交记录,同样可以通过git --pretty=oneline来查看简短的记录。
那么问题有来了,如果我还没有提交发现我修改的文件时错误的,这时候该怎么办呢???这里我向”gitfirst.txt“中添加这样一句话:"oh my god i am wrong",,,此时执行git status发现已经更改,并且git 会给我提示,应该如何回退到上一个版本
可以看到这里我通过"git checkout -- gitfirst.txt" ,来回退我的修改,查看文件,刚才添加的那一行"oh
my god i am wrong" ,确实不存在了,说明我们回退成功了。注意,这里我是在还没有将该文件通过"git add"添加到暂存区的情况。那么如果我已经git add gitfirst.txt文件了,怎么办呢??看下图:
可以看到当我添加该文件到暂存区当中以后,通过git
status,系统会提示我通过 git reset HEAD ,我先使用git reset HAD 文件名,然后使用git checkout -- 文件名来回退到没有修改时候的版本。
那么如果我在git中不小心删除了文件怎么办呢??这里我首先在该版本库当中新建一个"tobedelete.txt"的文本文件,然后通过git add 和git commit将其添加到版本库当中,此时如果我不小心将该文件删除了,这下该怎么办?先看下图:
可以看到当我删除该文件以后,通过git
status继续查看该状态,系统会提示我们可以通过git checkout -- file的形式恢复之前的删除。这一次,我先执行该命令:
git checkout -- tobedelete.txt
这样被删除的文件就恢复了。查看本地的该文件发现确实有恢复了。是不是很神奇呢。
这里关于删除还有另一种情况,如果我确实需要将该文件从本地和版本库当中删除该怎么做:其实git
已经给我们提示的很明显了,如下图:
通过上边几个命令就完成了删除操作,包括了从本地库删除,和恢复删除的文件到本地库。
好了,git学习的第一阶段就到这里。希望大家喜欢。
git学习(一)