最近和一个研一妹纸合作弄自己的网站,然后发现妹纸不太懂 git。于是就写下这篇文章。看看能不能言简意赅的教会一个新手如何使用 git。
os:本文所有命令,没有查任何资料,纯粹本人大脑记忆。换句话说,下面所有的命令,都是必须掌握(记忆)的。
啥是 git
简单理解为 git 是用来在多人间管理内容的,因为代码也属于内容,自然也可以使用 git 管理。
git,是个软件,所以自然可以安装。官方的安装地址为:git-scm.com/download/wi… 安装之后,就可以用了。上面介绍里说了,git 是用来管理内容的!。所以咱们就可以去到我们要管理的内容目录下,执行 git init,意味着对该文件夹开始进行 git 管理。
但是,如果一个目录下,你既有想纳入 git 管理的内容,又有不想纳入 git 管理的内容,那该咋办?此时 git add 出现了,其实说白了就是想对哪些文件纳入 git 管理,就用 git add 添加。没添加的,自然就不被管理。
比如我创建出来两个文件:
眼尖的妹纸自然可以发现这里我执行了一个 git status,这玩意干嘛的?其实就是看看哪些文件再被管理。
这句话的意思就是说此时这两个文件刚创建,还没有被纳入管理中。 然后我为了省事,我直接告诉妹子,你直接 git add -A 就行,换句话说,我们把这两个文件都纳入到管理中。此时如果再执行 git status,可以看到两个文件变绿色了。
也就是说,这两个新加的文件都被管理起来了。
总结一下:
- git init,对要管理的文件夹开始管理。
- git add [参数],对文件夹下的内容开始执行管理。
- git add -A, 对文件夹下的全部内容执行 git 管理。
- git status,看看要管理的文件夹下的文件都是个什么鬼。
版本控制
妹纸很兴奋的告诉我,上面的很简单,已经学会 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 管理,又或者是将已经管理的文件开始进行版本控制。我们都可以选择所有,亦或是选择多个。
总结一下:
- git commit,提交暂存区到仓库区。说人话:再已经纳入 git 管理的内容中选择要对其进行版本控制的内容。每一次commit,意味着一次版本。
- 因为每一次 commit 记录,都需要有一个版本说明。所以我们常使用:git commit -m "版本说明"。不用,会报错。
- git log,查看历史 git 版本。
第二堂课
搞错了怎么办?
搞错了,就回滚。因为回滚,本身并不是什么大不了的事情。
上面我们说了,每次 commit 都是一次版本。自然,每次 commit 记录,都会有一个版本号。比如上面那个图:
所以我们可以指定版本号回滚:
git reset --hard 版本号
但是这种我一般不常用。因为,我很讨厌去翻历史记录找版本号。大多数时候,我们都是要回滚到上一次版本。所以下面这个命令,更适合我:
git reset --hard "HEAD^"
这个^,就是上一次的意思。为了直观,我来模拟几次回滚:
我分别用两次commit,创建了 3.txt 和 4.txt。
然后看下版本记录:
现在我们回滚到上一个版本:
可以看到添加 4.txt 文件消失了:
总结一下:
git reset --hard"版本号",回退到指定版本。(后面的版本号并不需要双引号框起来),比如git reset --hard 0f73fd71b54a0c84dea52dcafa64e599a8961c84git reset --hard "HEAD^",回退到上一个版本。(这里要注意的是,这行命令在使用时,要记得后面的双引号,否则会报错)
远程相关
上面的所有东东,都是一个人玩的。但是,你可以发现,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 中的一些高级知识,比如底层数据结构)
我把我写的所有题解都整理成了一本电子书,每道题都配有完整图解。点击即可下载