最近和一个研一妹纸合作弄自己的网站,然后发现妹纸不太懂 git。于是就写下这篇文章。看看能不能言简意赅的教会一个新手如何使用 git。
os:本文所有命令,没有查任何资料,纯粹本人大脑记忆。换句话说,下面所有的命令,都是必须掌握(记忆)的。
01
PART
啥是 git
简单理解为 git 是用来在多人间管理内容的,因为代码也属于内容,自然也可以使用 git 管理。
git,是个软件,所以自然可以安装。官方的安装地址为:
https://git-scm.com/download/win
安装之后,就可以用了。上面介绍里说了,git 是用来管理内容的。所以咱们就可以去到我们要管理的内容目录下,执行 git init,意味着对该文件夹开始进行 git 管理。
但是,如果一个目录下,你既有想纳入 git 管理的内容,又有不想纳入 git 管理的内容,那该咋办?此时 git add 出现了,其实说白了就是想对哪些文件纳入 git 管理,就用 git add 添加。没添加的,自然就不被管理。
比如我创建出来两个文件:
眼尖的妹纸自然可以发现这里我执行了一个 git status,这玩意干嘛的?其实就是看看哪些文件再被管理。
这句话的意思就是说此时这两个文件刚创建,还没有被纳入管理中。然后我为了省事,我直接告诉妹子,你直接 git add -A 就行,换句话说,我们把这两个文件都纳入到管理中。此时如果再执行 git status,可以看到两个文件变绿色了。
也就是说,这两个新加的文件都被管理起来了。
总结一下:
02
PART
版本控制
妹纸很兴奋的告诉我,上面的很简单,已经学会 git 了。我说不,咱们才刚刚开始!
上面我们说了,可以通过 git add 来把要管理的文件纳入到 git 管理中。但是这仅仅只是纳入,并没有真实的管理起来。
那啥是真实的管理呢?版本控制。比如你写个文件,今天写第一版,明天写第二版,后天发现第二版写的有点问题想回到第一版。
我们通过 git commit,对已经纳入 git 管理的文件,进行版本控制。回到我们上面的那个图:
此时 1.txt 和 2.txt 已经被纳入到 git 管理中。我们通过 git commit 来进行提交。
当我们 commit 后,再自行 git status,会发现此时已经没有那个绿色的东东了。也就是说,此时刚才的两个文件,已经拥有了一个版本。
但其实,这个版本并不是跟着文件走的,而是跟着 commit 记录走的。所以,如果是工作中使用。我们尽可能的把一次相关的内容维护成一次commit记录。
然后,其实我们刚才说的通过 git add 纳入到 git 内容管理的过程,专业点叫做将内容放入暂存区;而通过 git commit 提交的过程,专业点是说把暂存区的内容放入到仓库区;
自然,开发 git 的人员不是傻子。所以不管是将文件纳入到 git 管理,又或者是将已经管理的文件开始进行版本控制。我们都可以选择所有,亦或是选择多个。
总结一下:
03
PART
第二堂课
搞错了怎么办?
搞错了,就回滚。因为回滚,本身并不是什么大不了的事情。
上面我们说了,每次 commit 都是一次版本。自然,每次 commit 记录,都会有一个版本号。比如上面那个图:
所以我们可以指定版本号回滚:
git reset --hard 版本号
但是这种我一般不常用。因为,我很讨厌去翻历史记录找版本号。大多数时候,我们都是要回滚到上一次版本。所以下面这个命令,更适合我:
git reset --hard "HEAD^"
这个^,就是上一次的意思。为了直观,我来模拟几次回滚:
我分别用两次commit,创建了 3.txt 和 4.txt。
然后看下版本记录:
现在我们回滚到上一个版本:
可以看到添加 4.txt 文件消失了:
总结一下:
04
PART
远程相关
上面的所有东东,都是一个人玩的。但是,你可以发现,add,commit,reset 等命令已经可以完美的来控制内容的版本了,这也是为什么说 git 是去中心化 CMS 的原因。其实不管是 github,还是 gitlab,这些地方只是为了找一个便于大家一起来进行版本控制的地儿。本身而言,它们并没有任何特殊。
我们要和远程协作,那我们自然得知道这个远程的地儿在哪。所以我们要把远程仓库先添加进来。我们一般使用 git remote add [名称] [地址] 来添加。我常用的两个名称是:origin 和 upstream,但其实,这名称你想叫做啥都可以。
git remote add [shortname] [url]
当我们添加了一个远程仓库之后,我们可以通过命令查看已经添加的远程仓库地址:
git remote -v
那我们如何和添加的远程仓库地址进行交互呢?这些内容我打算放在下一节和大家说!(本来想一篇文章就把 git 的东东讲完,但是发现还是不够的。所以我打算准备四篇内容。第一篇内容主要讲解 git 命令的基本使用,第二篇内容讲解 git 远程相关的使用,第三篇讲解 git 冲突的解决和常见的开发模式,包括 stash/merge,第四篇会讲解一些高端局,Git Plumbing。为大家分析一下 git 中的一些高级知识,比如底层数据结构