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 命令来查看你设置过的所有别名。因为之前清理了一波别名,下方就剩这么几个了。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏有趣的Python

5- 快速上手Linux玩转典型应用- Linux常用命令

742
来自专栏维C果糖

IntelliJ IDEA 中的版本控制介绍(中)

由于 IntelliJ IDEA 支持的版本控制工具非常的多,但咱们真正能够用到的也就两三个而已,因此在本篇博文中,咱们主要介绍 SVN、Git 和 GitHu...

2076
来自专栏好好学java的技术栈

手把手从零开始带你学git和GitHub

版本: 想想你平时用的软件,在软件升级之后,你用的就是新版本的软件。你应该见过这样的版本号:v2.0 或者 1511(表示发布时为15年11月),如下图:

1012
来自专栏北京马哥教育

linux下用tar进行数据备份

豌豆贴心提醒,本文阅读时间7分钟 本机上数据的手工备份 Linux系统上配有功能强大的tar命令,可以灵活地备份数据。 tar最初是为了制作磁带备份而设计的把...

3088
来自专栏進无尽的文章

代码管理| 创建自己的私有Cocopods库

iOS组件化的实现基本基于cocoapods,如何使用cocoapods创建自己的组件库,是实现组件化的第一要素,下面就创建自己的私有Cocopods库展开实战...

2995
来自专栏维C果糖

IntelliJ IDEA 中的版本控制介绍(下)

在「IntelliJ IDEA 中的版本控制介绍」中,我们已经简单了解了 IntelliJ IDEA 的版本控制机制,那么接下来,就让我们一起看看在 Intel...

2506
来自专栏技术博客

Google免费的SVN服务器管理VS2010代码

Google免费为我们提供了代码管理的SVN服务器。首先我这里用的Win7 64的电脑系统,用VS2010进行的代码开发。这里管理代码需要以下准备(现在用的都是...

2071
来自专栏技术视野

使用tail查看并跟踪文本文件的结尾

tail命令是用于查看文本文件末尾的核心Linux实用程序。您还可以使用跟随模式查看实时添加到文件中的新行。tail类似于,用于查看文件的开头

2274
来自专栏程序员互动联盟

【专业技术】linux启动流程剖析

半年前,我写了《计算机是如何启动的?》,探讨BIOS和主引导记录的作用。 那篇文章不涉及操作系统,只与主板的板载程序有关。今天,我想接着往下写,探讨操作系统接管...

3637
来自专栏屈政斌的专栏

【腾讯云的1001种玩法】centos 7 部署 dotnetcore + Angular2 实践

本文主要讲述了使用腾讯云主机,在centos 7 部署 dotnetcore + Angular2 的实践过程,该项目目前只是用于学习 dotnetcore ...

2.6K1

扫码关注云+社区

领取腾讯云代金券