版本控制工具(上)——Git的基本使用
一、Git简介
git是什么?
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。[2] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
// 摘自百度百科
更多历史诞生故事,可以参见廖雪峰老师的教程:Git诞生
git和svn有何区别
从概念上可以看到,git是分布式版本控制,而svn是集中式的。
更多关于两者的不同,请参见伯乐在线:http://blog.jobbole.com/31444/
二、Git安装
WIN安装
在 Windows 平台上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包,安装包百度云盘下载:点击下载
图文安装教程,请参考:http://blog.csdn.net/chengyuqiang/article/details/54178683
安装完成后,进行如下简单配置让git可以确认你的身份即可开始教程了(其它配置后续引入)
git图形化git-gui参考:https://www.runoob.com/w3cnote/git-gui-window.html
其它平台
其它平台(mac,linux)请参见:http://www.runoob.com/git/git-install-setup.html
三、Git入门使用
1.创建版本库—— git init
在当前目录创建:
git init
在指定目录创建:
git init newrepo
初始化后,会在对应的目录下会出现一个名为 .git 的目录(隐藏目录),所有 Git 需要的数据和资源都存放在这个目录中。
示例(目录有误,应该使用linux的目录系统):
2.添加文件到版本库—— git add,git commit
在刚刚的git仓库下(这里是git_repository)创建一个示例文件:readme.txt(内容自定义)
把文件加入版本库总共两步:
$ git add file1.txt
$ git commit -m "your message"
-m参数后表示的即为提交的注释(请务必添加!)
看示例:
其中第一次报错很明显提示当前不在仓库里面(因为不是在当前目录创建的仓库),切换到仓库后即可正常使用了!
四、时光机穿梭
1.查看状态——随时查看仓库状态,掌握版本库状况
将之前的readme.txt修改为如下内容(请注意ctrl+S进行保存):
使用git status查看当前状态
git status
示例:
可以看到当前,readme.txt已经被修改,但是未提交!
当然,以上只是知道被修改了,但不知道修改的细节,想知道修改的细节,可以通过git diff来查看
git diff file
提交修改同样是上文的两步——add commit:
提交后再次查看可以看到状态是clean
2.版本回滚
查看历史版本记录
和SVN一样,可以进行版本回滚。当然,回滚之前我们需要看一下有哪些版本,使用git log查看:
git log
需要注意的是,git的版本号是一个非常大的数字(由于它是分布式的),所以它显示的是十六进制的版本号,以保证分布式环境不会冲突
示例:
当然,有时候版本过多,可以加上一些参数进行格式调整,包括 git log -3(进行条数限制),git log --pretty=oneline
git log -
git log --pretty=oneline
示例:
版本回滚
版本回滚使用的是git reset命令
git reset <option>
比较常用的有:回到最新的一次提交(上一个版本)
git reset --hard HEAD^
示例:
回到指定版本:
git reset --hard 版本号
当然了,版本号是非常长的一大串数字,我们可以只输入前面几位(只要保证不会冲突即可),git会自动寻找的:
示例:
当然回到历史版本后查看日志是无法看到当前版本之后的信息的,例如有3个版本,假定为1 2 3,你在3版本回滚到了2版本,此时使用git log查看时,不能看到3这个版本了,也就是说除非我们记住了版本号或者正好时间来得及,还没关闭窗口,上翻查看到3的信息,否则这时似乎就无法恢复了。
但是,git提供了后悔药,你可以使用git reflog来查看每一次的命令:
git reflog
示例:
这样,又可以愉快的玩耍了!
3.工作区和暂存区的概念
之前我们所说的两步操作:git add git commint到底经历了什么呢?
add将工作区的内容加到暂存区,commit将暂存区的内容提交到当前分支。
【注意】Git管理的是修改,当把文件加到暂存区后再次修改是不会被管理的,也就是说git add之后的修改不会被提交,如果想提交,可以再执行一次git add,然后再统一提交即可!
更多关于这两个区的概念不在此处展开,可以参见:工作区和暂存区
4.撤销更改
假设将readme.txt进行了更改
在未提交之前想要撤销,可以使用:
git checkout -- readme.txt
查看示例(注意命令的正确书写,查看错误的原因):
更多更加完整的通俗的撤销更改的操作,请参见:撤销更改
5.删除文件
删除文件就不再赘述了,直接看命令:
git rm test.txt
Git附录
常用命令速查表:
英文版下载查看(可以打印)
链接:http://pan.baidu.com/s/1hsMnb4S 密码:akvw
易百教程:http://www.yiibai.com/git/git_checkout.html
官网:https://book.git-scm.com/docs
官网中文版:https://git-scm.com/book/zh/v2
最新文章
- 关于本月第一天,本月最后一天的SQL代码
- Android读取自定义View属性
- Linux下Memcache 安装和使用
- Web安全开发注意事项
- 12.编写一个Java项目,定义包,在包下定义包含main方法的类,在main方法中声明8种基本数据类型的变量并赋值,练习数据类型转换。
- hdu4421-Bit Magic(2-SAT)
- codevs 4511 信息传递(NOIP2015 day1 T2)
- Microsoft HoloLens 技术解谜(上)
- how to get file from classpath using jboss7.x.1 --reference
- Critical Log Review Checklist for Security Incidents
- 调bug时候应该提高思维深度(多问二十个为什么)
- 检测CSS属性 是否支持
- join()的用法
- 判断字符串的后缀.endswith()
- C++中将整型数与字符串型之间的类型转换
- java微信开发之地图定位
- laravel whereNotIn where子查詢
- Nginx安装及配置免费HTTPS证书
- 04C++const增强、枚举的增强
- JQuery UI之Autocomplete(2)后端获取数据
热门文章
- [Tyvj 模拟赛] 运
- TCP/UDP调试器 SocketToolV4.1
- 021.10 IO流 打印流
- 021.8 properties(开发使用频率高)
- URAL-1039 Anniversary Party---树形DP入门题
- sychronized关键字(多线程)
- iOS动画的逻辑结构:动画的定义--动画是采用连续播放静止图像的方法产生物体运动的效果。
- 从 Swift 中的序列到类型擦除
- docker-8-本地镜像发布到阿里云
- 《metasploit渗透测试魔鬼训练营》学习笔记第七章--社会工程学