版权声明:本文为博主原创文章,未经博主允许不得转载。
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目
Git的优势: (说到优势,那么自然是相对与SVN而言的)
- 版本库本地化,支持离线提交,相对独立不影响协同开发。每个开发者都拥有自己的版本控制库,在自己的版本库上可以任意的执行提交代码、创建分支等行为。例如,开发者认为自己提交的代码有问题?没关系,因为版本库是自己的,回滚历史、反复提交、归并分支并不会影响到其他开发者。
- 更少的“仓库污染”。git对于每个工程只会产生一个.git目录,这个工程所有的版本控制信息都在这个目录中,不会像SVN那样在每个目录下都产生.svn目录。
- 把内容按元数据方式存储,完整克隆版本库。所有版本信息位于.git目录中,它是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签、分支、版本记录等。
- 支持快速切换分支方便合并,比较合并性能好。在同一目录下即可切换不同的分支,方便合并,且合并文件速度比SVN快。
- 分布式版本库,无单点故障,内容完整性好。内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
Git的安装方式在windows下安装需要下载一个git的软件,在Linux下相对方便,只需要一条指令,Git安装后的配置网上也有一堆的教程,就不详细说了。
下面说下Git的基本使用:
一、建立远程仓库:
要使用git,首先得有一个远程仓库吧,下面是在自己的主页中新建一个远程仓库:
ps:其中仓库类型要选择public(公开),私有的是要收费的
建立远程仓库之后会有这样一个页面,点击箭头所指按钮,拷贝仓库地址: (这个地址一会要用)
通过命令 git init 把当前目录变成git可以管理的仓库:
首先创建一个文件,文件内容为111111
二、基本的推送功能:
使用 git init 指令,这时候你当前 TestGit 目录下会多了一个 .git 的目录,这个目录是Git来跟踪管理版本的。 .git 文件夹里面的任何文件都不能动
首先使用 add 指令,将当前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示记入了版本历史中,这也是提交之前所需要执行的一步,(在第一条指令前少了一个 git add file 命令)
其次使用 commit 指令,提交当前工作空间的修改内容到本地版本库
然后 remote 把本地版本库与远程仓库建立联系
最后使用 push 指令,把本地版本推送到远端仓库
接下来使用 status 命令,查看本地提交情况,(下面是没有需要提交的)
然后在文件的最后追加一行 222222
使用 diff 指令,查看之前的文件与现在的文件有什么改变(文件增加了一行内容)
再次使用status指令查看提交状态,发现有一个文件做了修改,并且没有添加到Git索引中(因为状态是红色的)
接着使用三步,再次把修改提交,并推送到远端仓库
三、版本回退:
按照上面的步骤我们再在文件最后增加一行 “333333”;至此,我们已经做了三次修改,并且都推送到远端仓库中了,下面的图可以看出
现在我已经对文件file做了三次修改了,那么我现在想查看下历史记录,如何查呢?我们现在可以使用命令 log, 演示如下所示:
精简的日志信息,可以使用 git log –pretty=oneline 指令
现在我发现刚提交的添加的333333有问题,我想回到添加333333之前的状态,也就是只有 111111 222222这两行的状态,可以使用 reset 指令
再次查看提交日志,发现提交333333 的日志没了,这个时候 file 中已经没有333333了
但是现在的问题假如我想回到只有111111的状态,可以通过 git reset –hard HEAD^^,这不是很笨吗?或者
我发现之前的333333是有用的,我有怎么回到有333333的状态呢?
这时候可以通过 reflog 指令获得每次提交的版本号,演示如下:
git reset –hard 版本号 ,回退到任意一次提交状态
下面是 log 与 reflog 的区别:可以看到 log 只能查看 commit(提交)记录,并不是所有记录,而 reflog 指令可以查看版本库的任何记录,包括回退记录
如果在 commit 之前,想要返回之前的状态,可以使用checkout指令
具体用法如下:
1、例如在file后面追加一行444444, file被修改后,还没有使用add命令添加到Git索引中
使用 git checkout – file (file是想要回退的文件,可以换成其他的) 把修改除去。
2、再次在 file 尾部添加 444444, 并且使用了 git add 之后
checkout 之后,修改并没有消失
再次添加 555555
没办法了,只有提交了
提交之后还可以回退到没有 444444 的版本:
当然除了这一种办法,还可以在 commit (提交)之前,自己在file中把 444444 删除了,然后再 commit 一次就可以了。
四、删除与恢复功能:
新建一个 test 文件,把test推送到远程仓库中
新增了一个文件 test :
可以在工作区中直接删除 test 来测试:
使用 git checkout – test(已删除的文件名)来回复test:
再试试另一种不能恢复的删除方式:(删除之后提交一次,就彻底地把 test 从版本库中删除了)
五、下载功能:
在任意一个目录下(即使没有之前的 .git 版本库),可以使用 clone 指令,克隆任意一个存在的远程仓库到本地
下面大致总结一下上面讲到的指令:
git init 当前的目录变成可以管理的git仓库,生成隐藏.git文件。
git add XX 把xx文件添加到暂存区去(XX可以使 单独的一个 . 表示添加工作区所有文件)
git commit –m “XX” 提交文件 XX是这次提交的注释。
git status 查看仓库状态
git diff XX 查看XX文件修改了那些内容
git log 查看历史记录
git reset –hard HEAD^ 或者 git reset –hard HEAD~ 回退到上一个版本
(如果想回退到100个版本,使用git reset –hard HEAD~100 )
git reflog 查看历史记录的版本号
git checkout – XX 把XX文件在工作区的修改全部撤销。
git rm XX 删除XX文件
git remote add origin https://github.com/用户id/远程仓库名.git 关联一个远程库
git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库
git clone https://github.com/用户id/远程仓库名.git 从远程库中克隆到本地
Git的使用还用其他很多方面,这里只是列举了一些常用的指令,其他的指令我也在学习中,如果有什么不对的地方,欢迎大神留言指正,非常感激。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
将远程远程仓库代码更新到本地仓库
有时候在使用git pull的时候,会莫名才报错。查了很多资料,尝试过git的很多命令。包括git fetch命令,都会报同样的错。最后终于发现了一条捷径,由网友提供,
当从远程的仓库到本地出错时候,使用git stash效果更佳。
方法:
git stash
git pull
这样就可以更新远程仓库到本地了~
注:文章转载自:http://blog.csdn.net/chengzi_comm/article/details/51673802 转载文章目的仅用作学习无商业用途。