上篇博客我们从 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 分支管理的一些东西。