Git 简明教程
概念
Git 是一款强大的分布式版本控制系统.在他的官网可以找到已经有很多著名的项目正在使用. 何为分布式?
Like most other modern version control systems, Git gives each developer a local copy of the entire development history, and changes are copied from one such repository to another. These changes are imported as additional development branches, and can be merged in the same way as a locally developed branch. Repositories can be easily accessed via the efficient Git protocol (optionally wrapped in ssh for authentication and security) or simply using HTTP - you can publish your repository anywhere without any special webserver configuration required.
Git 非常快.因为在commit时,都保存的是文件快照而不是diff,用空间换时间.所幸如今存储十分廉价.不过也有不好的一点,在clone一个远程仓库的时候非常的慢(GitHub在墙外受限,仓库比较大).
一般处理
初始化:
$ git init
这样就会在当前目录创建版本库.
常用指令:
添加文件
$ git add FILENAME
删除文件索引,并且删除文件.
$ git rm FILENAME
重命名.
$ git mv OLDFILENAME NEWFILENAME
提交更新,全部.
$ git commit -a
查看日志.
$ git log
查看指定版本日志.
$ git show xxxxx
切换分支.
$ git checkout BRANCHNAME
创建新的分支.
$ git branch BRANCHNAME
当然,有的时候我们需要在修改到一般了突然想到一个不确定可行的情况,于是我们可以就近创建一个分支,转移所有目前修改到此分支中.对原分支没有任何影响.
$ git checkout -b BRANCHNAME
实验完毕,发现可行提交后,直接返回主分支中进行合并.
$ git commit -a $ git checkout master $ git merge BRANCHNAME
分支合并,切换到需要合并的分支中,然后执行merge就能够合并.
$ git merge TARGETBRANCH
更多时候我们需要远程操作.除了直接clone出来一个完整的仓库,需要追加更新.
$ git fetch git://xxxx.xxxx master:LOCALBRANCH
将远程仓库中的分支fetch到本临时分支后(例子中为origin:master),如果指定了分支,则会保存到指定分支中去(例子中为LOCALBRANCH).然后进行代码审核,最后再merge到主分支中去.
当然,也有的时候我们对远程仓库中的代码有绝对信心,或者仅仅只是你一个人在维护,那么就可以直接获取并且合并.
$ git pull git://xxx.xxxx master
历史维护
你可以简单的使用log获得仓库中的日志信息.
$ git log
当然你也可以只查看最近的几个信息,以及其他更多可选的参数查看日志.(git help log会对你有很大的帮助)
Git的版本并不是像Svn中那样的递增序列,而全部都是Hash散列.也就是说你不能去拿r14版,而是给出指定版本的Hash Code进行匹配.这也是由于分布式协作管理引起的.好在Git对这种版本处理进行了许多优化,可以只输入指定版本的前五位就能确定版本.
$ git show xxxxx
想恢复到某一个提交版本中.
$ git reset --hard SHA1_HASH
这样之前的所有提交都没了. 当然,你可能仅仅只是为了切换到前面某个版本.并且不希望影响现在记录.
$ git checkout SHA1_HASH
他们二者(reset, checkout)之间的区别是: - reset : 跳转到指定版本.并且删除该版本后的所有提交. - checkou : 相当于checkout出某个特定的版本并且切换到指定的分支.
还原.
$ git revert SHA1_HASH
更多资源.
# 来源:Bana
最新招聘
- [北京] Python 程序开发 - 揣着
- [广州] 系统架构师 - 易度-云办公
- [北京] Python 程序开发(熟悉Fedora系统软件包管理) - 中科方德软件有限公司
- [北京] Python 程序开发(Django 或 web.py,实习生3K,有经验5-7K) - 北京某创业公司
- [北京] Python 系统级程序员(SAE for Python, 20K左右) - 新浪-研发中心