Git 学习

290 阅读4分钟

先放一个官方的文档,方便查阅

git-scm.com/book/zh/v2 中文文档还是很友好的

目前在日常中对于Git的使用比较依赖Idea自带的Git工具,但是偶尔会因为对于Git的使用不熟悉造成不便,所以目前打算先对Git的原理以及命令行进行学习,再使用工具会更加得心应手一点

git clone 克隆

一般都是克隆远程仓库,doc里面还有对于local clone的描述

git status 检查当前文件状态

在看 status 之前,要先了解Git存在的几种状态 git官方文档中给出三种状态

  1. modified

已修改表示修改了文件,但还没保存到数据库中。

  1. staged

已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

  1. 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,毕竟如果不了解一个工具就去使用,多多少少会出点岔子

共勉