概述
在学校的时候就稍微接触过git,但是学的非常皮毛,也没怎么在github上面上传过代码。进入社会,成为一名真正的码农后,才知道git是如此的强大。有一段时间,我很受版本管理的困扰,为了备份一些代码,并且又在原来的代码上修修改改,就总是复制、粘贴,真是头大。后来学习了git,觉得非常有必要总结一下,时常温故而知新。
git简介
Linux之父——Linus Torvalds在2005开发出git,当时是为了便于linux代码的管理。git是分布式管理器,与之相对应的集中式管理svn。它们的优缺点:
svn因为每次存的都是差异,需要的磁盘空间会相对的小一点,但是回滚的速度会很慢。
优点:代码存放在单一的服务器上,便于项目的管理。
缺点:服务器宕机:员工写的代码得不到保障;服务器炸了:整个项目的历史记录都会丢失。git每次存的都是项目的完整快照,需要的磁盘空间会相对大一点。实际上,git团队对代码做了极致的压缩,最终需要的实际空间比svn大不了多少;其回滚速度极快。
对于回滚速度,我深有体会。几秒钟,git就能回滚到以前的版本。
在使用git时,有些概念挺重要的,如
三个区:
- 工作目录:本地存放代码的位置,其中./git/objects存放哈希值,.git\refs\heads表示当前处于哪个分支上,默认是master
- 暂存区:当工作目录中增、删、改一些文件后,可以缓存到暂存区
- 版本库:当整个项目的代码基本上完成后,可以提交到版本库,保存起来。后续解决了一些bug后,可以再提交,项目代码可以不断更新。
三个对象:(三个对象的概念与三个区是紧密相关的)
- git对象;当把文件存入暂存区后,文件就变为git对象。git对象中存放的是key(val对应的hash值)-value键值对,其在内部是一个blob类型
- 树对象:将git对象通过命令变为树对象
- 提交对象:通过commit提交后,称为提交对象
高级命令
常使用的指令
git init # 初始化仓库
git add 文件名 # 将该文件存入暂存区
git add ./ # 将当前目录下的所有文件存入暂存区
git commit -m "请写入注释内容" # 将暂存区的文件提交到版本库,并且可以写入注释内容
git commit # 当注释内容较多时,可以使用此命令。直接进入vim界面,在最上面部分写下注释内容
git diff #查看当前哪些更新的文件还未暂存
git diff --cached #查看哪些已暂存但是还未提交
git status # 查看文件的状态
“文件的状态有两种,未跟踪、已跟踪,已跟踪又分为已修改(红色)、已暂存(红色)、已提交(绿色)”
git log #查看提交的历史信息
git log --oneline #查看提交的历史信息,并且每次的历史信息只显示一行
git branch 分支名 #创建一个分支
git checkout 分支名 #切换一个分支
git branch #得到分支的所有列表
git branck -v #查看每一个分支的最后一次提交
git branch -d # 删除一个已合并分支
git branch -D #强制删除一个分支
"版本穿梭,我用的挺多"
git branch name commmitHash #新建一个分支并且使分支指向对应的提交对象
“查看项目完整的分支历史”
git log --oneline --decorate --graph --all