Git知识总览(二) git常用命令概览

上篇博客我们从 git clone 和 git status 两个命令开始,引出了一系列的git操作命令, 请参见:《Git知识总览(一) 从 git clone 和 git status 谈起》。上篇博客中所涉及的git命令也是git命令操作中常用的基础操作命令,本篇博客继续来总结一下git使用时常用的命令操作以及其他相关基础知识。

下方是本篇博客所会涉及的内容:

  • .gitignore文件的配置
  • 使用 git diff 来查看修改的内容
  • git 中文件移除 -- git rm
  • git 中的文件重命名 -- git mv
  • 查看git提交日志的一些了操作 -- git log
  • 往提交中追加文件的操作 -- git commit --amend
  • Git打标签操作 -- git tag
  • git 中别名的设置(aliase

 

 

一、.gitignore

接下来来看一下git仓库中的 .gitignore文件,在该文件中记录了那些不被git管理的被忽略的文件。.gitignore中根据glob模式匹配规则来忽略一些文件,glob模式匹配是shell所使用的简化了的正则表达式。可以说glob的匹配规则和正则匹配差不多。

首先我们先看一个.gitignore的示例,上篇博客我们Clone了Masonry仓库,现在我们就来看一下Masonry中的.gitignore的内容。接下来我们就根据该示例来解读一下下方的忽略规则。

  • # :井号(#)用来添加注释用的,比如 "#注释"。
  • build/* : 星号(*)是通配符,build/*则是要说明要忽略 build 文件夹下的所有内容。
  • *.pbxuser : 表示要忽略后缀名为.pbxuser的文件。
  • !default.pbxuser : 感叹号(!)是取反的意思,*.pbxuser 表示忽略所有后缀名为.pbxuser的文件,如果加上!default.pbxuser则表示,除了default.pbxuse忽略其它后缀名为pbxuse的文件。

  

 

关于.gitignore文件就不做过多赘述了,忽略文件的规则并不是特别复杂,其中https://github.com/github/gitignore记录好多种类的.gitignore文件。如下所示:

  

 

 

二、git diff

可以使用git diff来查看未暂存文件的修改情况。下方是使用 git diff 对修改但未暂存的文件的查看。如果你的文件使用了 git add 命令将其添加到了暂存区存储起来了,那么git diff就看不到已经被暂存起来的文件的修改内容了。

  

 

查看位于暂存区的文件的修改内容可以使用 git diff --cached 或者 使用 git diff --staged 来查看暂存区的修改内容。

  

 

 

三、文件的移除

接下来来看一下如何从git中移除相关的问题,有时我们会直接从磁盘上将文件移除掉,然后此刻需要在git中也将该文件移除掉。下方我们就对之前创建的NewCreateFile文件在磁盘上进行删除,然后查看一下文件的状态。可以从下方的截图中看到,其中是未暂存的Delete状态。可以使用 git rm 或者 git add 来将删除的文件添加到缓存区,或者使用 git checkout -- NewCreateFile 来对删除的文件进行恢复。

  

 

下方是一系列的撤销操作,将删除的文件进行恢复:

  • 首先通过 git reset HEAD 文件名 操作从暂存区将已暂存删除的文件进行撤销。
  • 然后通过 git checkout -- 文件名 操作将删除的文件进行恢复

  

 

 

四、通过git mv进行重命名

下方就是通过 git mv操作将NewCreateFile重名为ARenameFile,通过git status查看的状态是rename,具体如下所示。

git mv NewCreateFile ARenameFile 命令等同于下方的三个命令:

  • mv NewCreateFile ARenameFile
  • git rm NewCreateFile
  • git add ARenameFile

  

 

 

五、git log相关内容

1、git log

我们可以使用 git log 命令来查看历史提交。git log 命令因为其后边参数的多样性,使用起来是比较灵活而强大的,并且比较实用。接下来,就来看一下 git log的具体表现。下方就是在Masonry仓库下使用的 git log 来查看的log日志。默认是由 提交号(commit: 每个提交的哈希值、作者(Author)、修改时间(Date)以及提交时的message组成,如下所示:

  

 

2、git log -p

使用 git log -p -1来查看最近一次提交的差异,当然也可以使用 git log -p 来查看所有的差异。下方是查看了最近一次提交的差异。

  

 

3、git log --stat

使用 git log --stat 命令来查看简化版的diff日志信息,如下所示。下方只会给出某个文件增加减少的某个代码量,而不会给出详细的修改内容。

  

 

4、git log --graph

git log --graph 命令可以让log以更直观的方式来展示。下方是 XMPPFramework 仓库使用 git log --graph来查看的日志信息,左边的内容是相关提交的分支合并信息,如下所示:

  

  

5、git log --pretty

git log --pretty=oneline 可以让每次的commit在一行上显示,如下所示。每一行就是一个commit,前方是commit所对应的hash值,后方是commit所对应的message。

  

 

我们还可以使用git log --pretty来定义显示格式,下方内容是“ git log --graph --pretty=format:"%h - %an, %ar : %s" ”命令的输出内容, --pretty=format:后边跟着的是格式化的字符串。其中 %h 表示简化版的Hash值, %an 表示作者名字(Author Name), %ar 表示多久以前提交的,%s 则是提交信息。

  

 

下方是格式的常用选项:

  

 

下方是git log常用选项:

  

 

 

六、git commit --amend

首先我们来看一下该命令的演示图,从下图中不难看出,使用--amend选项的提交会与最后一次提交进行合并生成一个新的提交,之前的提交会被废弃掉。

  

 

如果你的文件已经commit了,如下所示。下方是查看的最新一条的commit信息。但是,如果你仍然有文件没有提交,想追加到最后这个commit上的话,那么就可以使用git commit --amend命令来追加你的提交到最近的一次提交上面(本质上是合并,生成了一个新的commit)。

  

 

下方就是使用git commit --amend操作后的日志,从提交的message中可以看出,确实追加到了上一次提交上。不过通过commit号来看,是一次新的提交,只不过是对上次提交进行和合并,然后覆盖上次提交。

  

 

 

七、打标签-Tag

打标签其实就是给特定的commit做个标记,类似于里程碑的东西。在版本管理中,我们可以为每个版本打个标签,或者在每次发版时打个标签,便于后期的查找。下方会列举一些关于Tag的内容。

 

1、展示所有标签

可以使用 git tag 来查看所有的标签。下方是查看了Masonry仓库中所打的标签,具体输出如下所示。可以使用 git tag -l 'v0.6.*' 来查看0.6相关的tag。

  

 

2、创建标签

创建的标签包括“轻量标签”(lightweight)和 “辅助标签”(annotated)。轻量标签之所以轻量是因为它只是一个特定commit的引用。而“附注标签”是存储在git数据库中的一个完整对象。可以使用git tag -a 版本号 -m 'tag 信息'来创建“轻量标签”。下方命令就创建了一个轻量标签,并且使用git tag进行展示。

  

 

我们可以使用 git show v1.1.1 来查看v1.1.1处的相关信息。下方就是tag v1.1.1出的相关信息,其中包括tag的创建人和创建信息以及打tag时的message,并且还会有该tag所对应的commit的相关信息。具体如下所示:

  

 

3、给之前的commit创建tag

如果你想给之前的某个commit打一个tag, 那么只需要将commit号追加到打标签的命令后方即可,如:git tag -a vx.x.x -m 'message' commit-hash。

在下方截图中我们使用了 git log --pretty=oneline 命令查看的所有提交。在下方信息中,我们可以看到之前的所有的tag号以及所对应的commit号。现在我们要在画红框的commit上创建一个tag, 并命名相关的tag号为 v1.0.1。

  

 

通过下方的git tag命令就可以给相应的commit补一个tag, 然后我们可以再次使用git log相关命令来查看一下这个后补的tag。

  

 

下方是后补的tag信息,

  

 

4、将标签push到远端

上面创建的标签都是在本地所做的,可以通过 push 命令来将创建好的某些tag或者所有的tag使用push命令进行共享。下方是关于push相关tag的一系列操作:

  • 首先我们使用 git remote show 来查看所有的远端,如下所示为origin。
  • 然后我们可通过 git push origin v1.0.1 的命令格式将 tag 号为 v1.0.1 的标签push到远端origin。push成功后,会提示在相应的远端创建了一个新的标签。
  • 最后可以使用 git push origin --tags 命令将本地创建的所有 tag 推送到远端origin。

  

 

作为上述标签的push操作后,接下来我们可以去github上相应的仓库中去查看新增的标签。下方的 v1.1.1 和 v1.0.1 正是我们之前所创建的tag。

  

 

5、checkout tag 

在我们检出分支时,在分支的名字后方添加上相应的版本号,即可在该 tag 号所对应的分支上进行checkout。下方的操作就是在 tag: v1.1.1 所对应的分支上 checkout 了一个名为 MyTagTestBrach 的新分支出来。我们可以使用 git show 来查看一下当前分支的最近一次提交信息。从信息中不难看出,其 tag 号就是所对应的 v1.1.1。

关于 Git 的分支的关联,下篇博客将会详细的聊一下 Git 分支管理的东西。

  

  

 

 

八、配置 Git 别名

1、别名的设置

在使用 git 命令时,如果你觉的 commit、checkout 等命令太长,每次输入全称太繁琐。在 git 中可以给一些命令添加一些别名,然后同这些别名来更为简洁的去操作git。下方就通过一个小示例来看一下git的别名。

  • 使用 git config --global aliase.zhuangtai 给 status 命令创建了一个 zhuangtai 的别名。
  • 在使用使用 git zhuangtai 命令时,就等同于 gitstatus 命令。(此处尝试了一下用我大中华的汉字来做别名,可惜不支持,就用拼音来test了)
  • 当然一般不推荐用拼音呢,还是用其英文命令的的缩写比较好,比如 status 可以定义为 st, checkout 为 co,等等。下方又给 status 设置了其他的一个别名 st。
  • 同一个命令的别名是可以同时存在的,可以使用 git zhuangtai、也可以使用 git st。

  

 

2、查看所设置的别名

可以使用 git config -l 命令来查看你设置过的所有别名。因为之前清理了一波别名,下方就剩这么几个了。

  

 

3、使用oh-my-zsh插件使用提供的别名插件

oh-my-zsh提供了特别全的Git别名的使用方式,安装完以后即拥有了好多好用的快捷使用方式。

  

 

地址(https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/git.plugin.zsh) 

篇幅有限,本篇博客就先到这儿吧,下篇博客会总结一些 Git 分支管理的一些东西。

posted @ 2018-01-10 09:25  青玉伏案  阅读(5762)  评论(4编辑  收藏  举报