凌晨熬夜写了一篇关于Git的使用(一)【点击跳转】,现在继续记录一下Git的使用,本文记录的是Git的操作使用
Git的命令跟Linux很像,例如建立文件夹是mkdir、cd是打开文件夹、touch是建立文件、ls是浏览文件等等,这些就不一一详细说了。


获取和创建目录

git init

git init命令用来初始化一个Git仓库,Git的很多命令都需要在Git的仓库中运行,所以每次使用的git的时候都先运行一下这个命令,我们也说这是使用Git的第一个命令。在执行完成 git init 命令后,Git仓库会在目录下生成一个 .git 目录,该目录包含了资源的所有元数据,其他的项目目录保持不变。
命令例子:

git init 仓库路径 //在指定的仓库路径建立git仓库
git init //在该目录建立git仓库

git clone

这个命令是用来从现有的git仓库拷贝项目,例如你在github上看到一个项目,可以用这个命令拷贝到自己的项目文件夹中
命令例子:

git clone [url] //[url]为你想拷贝的项目文件夹的路径或者网址,支持HTTPS、SSH和GIT协议
git clone [url] [folder] //[folder]是拷贝项目的存放点

基本快照

Git 的工作就是创建和保存你的项目的快照及与之后的快照进行对比。本章将对有关创建与提交你的项目的快照的命令作介绍。
在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库 中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。

git status

git status 以查看在你上次提交之后是否有修改。实际上就是在查看文件的状态。该命令有很多flag,就不一一详说,可以用 git status -h 查看每个flag的用途。
命令常用例子(会根据我的使用而更新):

git status //显示全部状态信息
git status -s //显示最短的状态信息

注意一下,如果使用git status -s的时候,返回的信息是这样的(假设项目里面有text.md为例):
git status -s //输入的命令
AM text.md //返回的消息

这是什么意思呢,这里拆分一下返回的消息

AM //文件的状态
text.md //文件名

那么AM怎么理解呢?
如果仅仅显示A,那么该文件通过git add命令(下面会说)放进了缓存里面;
如果显示是AM,那么就是这个文件在缓存里面但是原文件已经修改过,在缓存的已经不是最新文件了,也就是说和缓存的文件和原文件有差异。

以下是各个状态:

A: 本地新增的文件(服务器上没有).
C: 文件的一个新拷贝.
D: 本地删除的文件(服务器上还在).
M: 文件的内容或者mode被修改了.
R: 文件名被修改了。
T: 文件的类型被修改了。
U: 文件没有被合并(需要完成合并才能进行提交)。
X: 未知状态(很可能是遇到git的bug了,可以向git提交bug report)
?:未被git进行管理

git add

git add 命令可将该文件添加到缓存中
命令例子:

git add [文件名] //文件名可输入多个,注意空格分开

上面提过,输入git status -s可以看到状态,一般通过输入git add之后,全部文件都是A状态而不是AM状态,所以每当修改了一次本地原文件之后,就要用git add命令把原文件更新到缓存上面。

git diff

git diff:尚未缓存的改动,就是可以查出一个项目文件在执行git add前做出了什么修改,前提是该文件已经有缓存过一份。其实简单来说就是查看工作区和暂存区的不同
git diff --cached:查看已缓存的改动,简单来说就是把改动的文件缓存之后,对比前后两次缓存的改动情况,简单来说就是查看暂存区和指定提交版本的不同
git diff --stat:限制摘要而非整个diff,字面意思,就是显示文件的修改摘要,删了还是增了
git diff HEAD (-- file):查看已缓存的与为缓存的所有改动,是查看working tree和commit的差别的,也就是比较的是工作区中的文件与版本库中文件的差异。HEAD指向的是版本库中的当前版本,而file指的是当前工作区中的文件(HEAD代表的是最近的一次commit的信息)
git diff <commit>:查看工作区与指定提交版本的不同。
git diff <commit>..<commit>:查看2个指定提交版本的不同,其中任一可缺省(为HEAD)。
git diff <commit>...<commit>:查看2个不同分支指定提交版本的不同,其中任一可缺省(为HEAD)

git commit

git commit是将git add写入的缓存区里面的项目添加到仓库中的一个命令,不过要提交前要先配置好名字和电子邮箱地址,具体请查阅——>Git配置 用户信息配置
更多git commit用途可以命令输入 git commit -h 查看
更多命令用法:

git commit -m '信息名称'  //以在命令行中提供提交注释
git commit -am '信息名称' //自动先执行git add再执行git commit -m '信息名称'

git reset HEAD

命令用于取消已缓存的内容,执行 git reset HEAD 以取消之前 git add 添加。
命令格式:

git reset HEAD 文件名

git rm

相信用linux的用户对rm并不陌生,git的用法也是一样,该命令可以直接把文件从项目目录里面删掉,而不留下痕迹和任何提示。

只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示

命令格式:

git rm 文件名(文件具体路径) //直接删除项目里面的文件
git rm -f 文件名(文件具体路径) //强制删除,专用于删除被修改并已经放到了暂存区的项目文件
git rm --cached 文件(文件具体路径) //删除暂存区域的文件,而不删除工作目录的源文件

git mv

相信用linux的用户对mv也并不陌生,git的用法也是一样,用于移动或重命名一个文件、目录和软连接。
命令格式:git mv 文件名(文件夹、文件路径) 文件名(文件夹、文件路径)//注意空格

标签和查看历史提交

在做开发的时候,我们经常会保留一个版本的快照,然后在必要的时候可以提取快照出来,从而研究这个版本有没有bug或者提升空间,这个时候为了方便找快照,就可以使用标签功能给这个快照打上标签,在以后开发的时候,就可以根据标签取出某个版本的历史快照。

创建标签

git tag 标签名 //标签名处推荐输入一个版本号,例如v1.0
git tag -a 标签名 //此命令和上面不一样的地方在于,这个命令会有提示让你输入一个标签信息,可以输入什么时候建立这个版本,谁建立的等等信息,我们称之为附注

查看已有标签

git tag //后面什么都不用输入

追加标签

如果忘了在某个已发布的提交上面打上标签,我们可以追加标签。命令格式如下:

git tag (-a) 标签名 提交ID号

首先先用git log --oneline --decorate --graph找出那个已经发布了的提交
假设下面这个是你找到的提交

56f3f0f (HEAD -> master,  tag: v1.0) readme.md

在前头有一个56f3f0f,这个就是提交ID号(虽然不知道官方是怎么定义的,反正这里我就称为提交ID号吧),记下来,然后输入以下命令,就完成追加了

git tag -a v0.9 56f3f0f //命令加了-a,需要输入附注

删除标签

这个命令就不多说了,很简单,格式如下

git tag -d 标签名

查看此标签的修改

这个命令也不多说了,标题字面意思,格式如下

git show 标签名

其他命令

指定标签信息命令:git tag -a 标签名 -m "标签信息" //注意双引号
PGP签名标签命令:git tag -s 标签名 -m "标签信息" //注意双引号

查看提交历史

相关命令:

git log 

--oneline

查看历史记录的简洁的版本

--graph

查看历史中什么时候出现了分支、合并

--decorate

此命令用来看每个commit的引用,如分支、tag等

--reverse

逆向显示所有日志

--author

显示指定用户的提交日志

--since、--before、 --until 和 --after

显示指定日期的提交日志
示例代码:

git log --oneline --before={5.weeks.ago} --after={2019-03-03}
//5周前切3月3日之后的所有提交信息

参考资料

  1. 菜鸟教程--Git基本操作
  2. 菜鸟教程--Git创建仓库
  3. git status -s 状态码解析
  4. git diff 、git diff --cached 、git diff HEAD区别
  5. git diff 与 git diff --cached与git diff HEAD -- file
  6. git diff与git diff HEAD -- file
  7. Git下文件的三种状态
  8. git文件状态,暂存与提交
  9. 菜鸟教程--Git标签
  10. git log --oneline --graph的读法
  11. git log命令全解析,打log还能这么随心所欲!
  12. Git Log高级用法
  13. Git教程 - 廖雪峰的官方网站
  14. Git查看提交历史 - 菜鸟教程