先放一个官方的文档,方便查阅
git-scm.com/book/zh/v2 中文文档还是很友好的
目前在日常中对于Git的使用比较依赖Idea自带的Git工具,但是偶尔会因为对于Git的使用不熟悉造成不便,所以目前打算先对Git的原理以及命令行进行学习,再使用工具会更加得心应手一点
git clone 克隆
一般都是克隆远程仓库,doc里面还有对于local clone的描述
git status 检查当前文件状态
在看 status 之前,要先了解Git存在的几种状态
git官方文档中给出三种状态
- modified
已修改表示修改了文件,但还没保存到数据库中。
- staged
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
- committed
已提交表示数据已经安全地保存在本地数据库中。
git diff 查看未暂存和已暂存
注意:diff 本身只显示尚未暂存的改动,而不是上次提交以来所有的改动,所以你暂存了更新的文件,再diff看到没有东西是正常现象(可以通过 --staged 来查看已暂存文件和最后一次提交文件的差异)
git commit 提交更新
默认提交的消息会以最后一次运行的git status消息输出,并且提供空行作为提交说明,如果需要更加详细的可以添加-v会以git diff的形式输出
--amend 参数 用来追加文件,上次的提交可能漏了点东西或者出了什么错误,用这次的commit去追加上次的commit整合成一个
在项目过程中有遇到,公司MR的规范最好一个MR使用单commit的形式,避免出现冲突,所以后面的commit最好采用追加的方式
git add 添加文件(跟踪文件) && git rm 移除文件(放弃跟踪文件)
很长一段,建议自己--help看一下
add 与 rm 相对,与其说他们是添加和删除文件,不如说是添加进git的管理和从git的管理里面去除,所以用跟踪和放弃跟踪比较贴切
当然也可以通过.gitignore文件进行配置
git log 查看提交历史
查看提交的历史,会显示提交人,提交信息啊之类的,有很多参数可以进行很好的优化显示,具体没细看,用到的时候可以查看一下
etc.format 定制显示的格式
git reset 重置
比较神奇的操作,可以允许恢复到指定的commit处,还是比较危险的,尤其是加上--hard参数,少用,保证规范的话一般用不到
谈谈Git的分支
之前在学校里面的项目大多都采用一个master撸到底的方式,出现了冲突就猛merge,进入公司实习之后,开始接触多特性分支的管理方式,第一次接触还是有点陌生,所以分支这块还是主要学习的点
首先需要了解的是Git存储的是什么
Git 保存的不是文件的变化或者差异,而是一系列不同时刻的快照。在进行提交操作时,Git 会保存一个提交对象(commit object)。该提交对象会包含一个指向暂存内容快照的指针。但不仅仅是这样,该提交对象还包含了作者的姓名和邮箱、提交时输入的信息以及指向它的父对象的指针。 首次提交产生的提交对象没有父对象,普通提交操作产生的提交对象有一个父对象, 而由多个分支合并产生的提交对象有多个父对象。
分支的本质仅仅是指向提交对象的可变指针
单次commit产生的对象
多次commit会产生指向上次的指针
分支的版本跟随着移动
通过git branch创建新的分支
head代表当前分支所在的位置,通过git checkout进行切换分支
新的提交并不会移动master分支
此时的checkout也不会移动master
注意如果在这一步,git觉得自己不能干净利落的完成切换,毕竟存在文件的差异,他会禁止切换并给你对应的信息,让你进行判断,我一般采取stash目前的修改,然后checkout
此时如果进行不同的提交,那么就获得了分叉分支
目前学习到的内容就是这些,git的官方中文文档有更加详细的例子,可以看着那些去了解Git,毕竟如果不了解一个工具就去使用,多多少少会出点岔子
共勉