Git进阶学习笔记

好久好久之前,入门学习了一下Git,基本上可以使用GitGithubpush自己的代码,并且clone一下别人的项目。本以为这就能够满足我的日常需求了,但是随着学习以及使用的复杂性,发现那些基础的命令不能再满足我的日常使用了,于是最近在看《pro Git》一书, 希望能更深入的学习一下Git这个工具,工欲善其事,必先利其器。

1. git config配置

刚开始使用Git的时候,很多人肯定都忽略配置的相关内容。也许你还记的在第一次push内容的时候,总会有提示让你设置你的用户名以及邮箱。其实这就是最基本的一个配置。

git config --list可以查看目前git仓库中有哪些配置。那么另外一个问题来了,Linux中有个观点是:『一切皆文件』,这些配置从哪里来的?共有3个地方设置,分别是系统级的、用户级的以及仓库级的。

  1. /etc/gitconfig 系统级的配置,系统中所有的git仓库都普遍适用的配置。使用git config --system来写入;如:
    git config --system user.name pengloo53

    注意:配置文件不一定是/etc/gitconfig,去你的git安装的目录下去找。怎么找?Linux和Mac用户可以使用which git找到git的所在地,然后就好找了,比如我的git的系统配置文件在/usr/local/etc/gitconfig下。我的Mac是通过homebrew安装的git。如果是Windows系统,去安装目录下找就OK了。

  2. ~/.gitconifg用户级的配置,该用户下所有的git仓库都普遍适用的配置。使用git config --globe来写入;如:
    git config --globe user.email aa@xxx.com

  3. .git/config仓库级的配置,只针对某个仓库而言的配置。在仓库目录下直接git config来写入配置。

如果我很无聊,分别使用git config --system user.name name_1git config --globe user.name name_2以及git config user.name name_3设置了我的用户名,那么推送消息的时候到底记录的是哪个呢?这里不用担心,git会一级一级覆盖的,也就是会显示最小范围的那个级别。如果有相同的配置存在,最终会显示仓库级的那个配置。

2. git commit提交

这个命令可真是熟悉得不能再熟悉了,每次git add --all都要习惯性的git commit -m "message"一下,message是一定要写的,Git默认也是要你写的,这是个好习惯,一定要坚持下去。反正我都习惯了,不写-m都觉得奇怪了。

当然保留好的习惯的时候,该偷懒也得偷懒一下。可以尝试git commit -a -m "message"git add --allgit commit -m 'message"合并一块写,我相信你会更爽的。

如果一不小心,message写成了meaasge,虽然不是啥大事,但是对于一个『强迫症』来说,那叫个难受。没事,试一下git commit --amend修改提交文本。

再如果commit之前忘了add某些文件了,想一块commit进来,没关系。

1
2
git add --all
git commit --amend

这样就不用产生两条提交信息了。

3. git show查看

在入门的常用命令的笔记里,通过git show v1.0可以查看标签信息,然而它还可以查看每次的提交信息,可能这并不是什么进阶知识,但是对我来说还是比较新鲜的,就记在这里吧。

当你想查看之前某个的提交改了些啥玩意的时候,那么git show就大有用处了。先通过git log --graph --pretty=oneline --abbrev-commit查看一下自己的分支信息,然后git show commitID就可以了。当然你不用写下全部的commitID,写前4位就行了。

如:git show 0fce,就可以查看0fce*那次都提交了哪些内容。

4. git remote远程

在之前,这个命令我基本上没有怎么使用过,因为创建的仓库,除了第一次使用关联到github上之后,就再也没咋用了。把本地的仓库上传至远程,基本上会用到如下两条命令。

1
2
git remote add origin https://github.com/XXX/xxx.git
git push -u origin

如果是你一个人玩Git,那么上面两条命令真的够了,很长一段时间我就是一个人玩。但是使用Git版本控制器就注定了你不能再一个人玩下去了,协同处理项目才是版本控制器的真正意义。

git remote -v查看一下远程的仓库,通常情况下,你会看到一个origin这个远程仓库,它是默认的远程仓库。基本上就是你第一次push or clone的那个仓库。

情景

假设你在githubfork了一个别人的项目,并且clone下到本地,而且玩了老长时间了,也许你还pull request一下别人的项目,运气好,别人还merge了你的pull request,然后过了好长时间,你都放弃了这个项目,然而别人还在一直更新,你想看看最新的项目状态。那么你可以通过下面几条命令,再把别人仓库的内容抓取下来。

1
2
3
git reomte add others https://github.com/xxx/xxx.git
git fetch others master
git checkout -b tmp others/master
  1. 首先添加一下别人的远程仓库,命名为others
  2. 然而使用git fetch命令抓取一下远程仓库的内容,通过git branch -r,你就可以看到others/master远程分支了;
  3. 再在本地创建一个tmp分支跟踪远程others/master分支。
  4. 最后tmp的处理权就交到你的手里了,删除它或者merge到本地master上就看你的心情了。
  5. 最最后别忘了,再把它推送到你的远程分支上origin/master,使用git push origin master就行了。

5. gitk图形界面

要是让我记那么多git log的参数实在是太让人为难了,基本上是用的时候现查命令参数,自从知道了gitk,现在连git log都快忘了,这个图形工具真是太方便了。一目了然各个分支都哪个地方。纵使我再崇拜命令行,我还是为了它妥协了。

Windows上就不用安装了,安装完git for windows就可以直接使用了。

Mac上如果无法使用gitk命令启动图形界面,赶紧点击这里安装,不要再犹豫。

Linux,啊,能把Linux当桌面系统使用的用户都是高手,我这里就不班门弄斧了。

以上是这段时间对Git学习的一些内容,当作是Git学习的一个进阶阶段吧。Git博大精深,想深入了解还需更多的学习。当然它毕竟只是一个工具,工具只有在使用的时候才能体会到它是否满足自己的需求,期待下一次进阶学习。

git