这可能是你看过最通俗易懂的 Git 入门文章了

1,150 阅读13分钟

本文已参与掘金创作者训练营第三期「话题写作」赛道,详情查看:掘力计划|创作者训练营第三期正在进行,「写」出个人影响力

前言

确定要写“通俗易懂的 Git入门” 的文章之后,去 b 站上搜索相关视频进行学习,发现了一个视频这可能是你看过最通俗易懂的git教程了 | 什么是git?它如何实现代码版本控制的?它和github什么关系?赶紧看这期教程吧【设计师的100个前端问题-05】,up 主用动画的形式和大家介绍 Git,看了之后,发现是真的简单易懂,下面基于视频教程,结合自己所学的知识,整理出这篇文章,当然也补充了一些内容,比如 git 相关命令。

什么是代码版本管理?

举个例子,视频中是以设计师,有过这样的改稿体验,从定稿之后,还会进行多次修改调整。

image.png

那为了防止老板或者甲方那一句,还是用上一版的吧。

设计师在每一次大改设计稿的时候,都会保留一份之前版本的设计文件,所以我们这种保留一份之前设计稿的这种行为,其实也就是在进行设计稿的版本管理

只不过这种是纯人工的管理,很简单粗暴,不方便维护。

image.png

其实我们在大学的时候,写论文的时候,也会遇到这种情况,先写好初稿,如果要修改的话,会复制一份,在新的文件上进行修改调整。

git 就是我们在写代码的时候,用来帮助我们进行代码版本管理的一个工具,强大并高效,在互联网公司中,大部分都是使用 git 进行代码版本管理的。

git.gif

git

git 是一个程序,也是一个软件,但是它跟我们图形化界面的软件不太一样,打开终端的方式,输入 git 的相相关命令来进行操作,就是一个黑窗口,当然它也提供图形化的 git 工具进行代码的管理。

image.png

不要害怕使用命令,当你使用命令久了之后,你会发现使用命令,可能比图形化界面操作更高效。

不管你使用使用哪种方式,我们都要来了解 git,是如何帮助我们实现代码版本管理的。

下面会先不说具体命令,而是用直白的语言描述出来,后面会对某些操作涉及的命令,进行统一讲解。

当我们使用 git 的时候,其实都是对一个文件夹进行操作,比如说,我这里新建了一个文件夹。

使用 git 对它进行一个初始化之后,文件夹会多了一个 .git 的隐藏文件夹。

这个文件夹是专门用来存放该文件夹中所有文件的版本管理的相关信息。

image.png

被 git 初始化过的文件夹,我们一般称它为一个 git 仓库。

image.png

在这个仓库中,我们就可以使用 git 的各种命令,对仓库中的代码文件或者其他文件进行版本管理了。

git 中非常重要的概念:存档和分支。

image.png

存档和读档

这个存档是自己总结的一个称呼,就有点像以前打单机电脑游戏,经常需要进行存档,只要你存了档,你就可以随时跳转到某个存过档的游戏进度。

image.png

git 当中也有类似的功能。

我们可以把上面被 git 初始化的文件夹,想象成一个文件夹展示台,文件夹展示台下面还有一个后台,这个后台就是 git 在背地里帮我们进行代码文件版本管理控制的地方。

后台决定了,在这个文件夹展示台上展示的该显示什么版本的代码文件

image.png

在这个后台,有一个专门负责进行档案记录的管理员,我们就先叫他 master,就是存档大师

image.png

我们下面会让 git 进行一些存档操作,其实就是这位 master 存档大师,在帮我们做。

我们先在文件夹里面,新建一个文本文件,取名叫做“第一次用 git.txt”,里面写上 版本一,保存文件之后,我们就可以进行存档的操作了。

image.png

不过这个存档操作,需要分成两步:

  1. 你先要告诉 git,你要对哪些文件进行存档,因为有时候,你可能修改了不少文件,但是只想存其中几个,所以告知 git 要存哪些文件的命令,是必须的。
  2. 在 git 里面有一个暂存区,当你要对某些修改过的文档进行存档,那么就要先执行添加的命令,把这些文件添加到暂存区。

image.png

当你添加相关文件到暂存区之后,你再让 master 管理员,帮我们做个存档,他就会自动的把暂存区的文件的变化,给记录到存档中,这样 master 存档记录条上,就生成了一个存档记录。

image.png

我们接下来修改一下文本文件,我在里面另起一行,加上版本二这三个字,然后再让 master 帮我存个档, 这样底下存档记录条,就会增加一个新的记录,同时当前文件夹的内容展示,就是最新的存档记录的内容。

image.png

继续修改,我再来写第三行 版本三,又给它存过档,存档记录条上有多了一个记录,同时文件夹里面显示的内容,依然是最新的记录内容。

image.png

当有了多个存档记录的时候,你可以通过 git,在各个记录档案之间来回切换,这也就是读档的操作,当我切换回第一条档案的时候,你会发现,第一次用 git.txt 文件显示的内容是 “版本一”,是第一次存档的内容。

image.png

切换到第二条存档的时候,文档的文字,又多了一条版本二。

image.png

当你切换到不同的存档记录时,你的文件夹中显示的文件(内容),就会切换到该存档所记录的文件的内容状态,以上就是 git 的存档和读档。

分支

分支也是 git 中非常重要的概念。

image.png

当你对一个文件夹进行初始化的时候,它就自动创建了一个名叫 master 的分支,这个名字,不就是上面说的master 存档大师吗?是的。

你可以把每一个分支,理解为是一个档案管理员,你之前所有的存档读档的操作,都是在 master 的分支当中,也就是 master 管理员帮你负责记录和管理的,在你使用 git 的时候,你一定会在某个分支之下,就像你一开始,git 就会自动帮你分配一个叫 master 的档案管理员。

image.png

当你在 master 分支,创建了一个新的分支,比如,叫 fixbug,可以理解成 git 帮你召唤了一个名叫 fixbug 的新档案管理员。

git 会给他抄一份 master 管理员的档案记录条上最新的存档记录作为 fixbug 管理员,一开始工作的档案记录条的初始记录。

image.png

只不过每次,你只能召唤(使用)一个档案管理员帮你工作,你要使唤哪个管理员,你就先要切换到相应的分支上,现在我切换到新的分支 fixbug 中,然后把这个文件的名称改为分支二。

image.png

然后我再记录存档一下

image.png

接着切换回 master 分支,你会发现这个文件的名称又变回原来的名字

image.png

我再切换回 fixbug 的分支,文件的名字又变成了 分支二,所以关于分支,有以下几个特点:

  1. 在新的分支中,同样可以对文件中的内容,进行存档和读档,毕竟 fixbug 和 master 是两个管理员嘛,而且他们用的都是各自的档案记录条
  2. 在 git 当中,不仅可以在分支中,可以切换不同的存档记录,而且分支之间也可以相互切换,当你切换分支的时候,文件夹的文件信息,就是切换到的分支下,最后一个存档的状态
  3. 当你在分支上,修改文件内容的时候,并不会影响之前的或者其余的分支,分支和分支之间的内容,是完全(相互)独立的。还有如果你有需要,分支是可以随意创建的,也就是说你可以让 git 给你召唤无数个档案管理员。

还有更重要的一点,分支是可以被合并的。

image.png

举个简单的 git 使用的例子,比如我使用 git 开发的我自己的个人网站,当我开始写代码的时候,我会把我网站的初始文件,都放到一个文件夹中,然后我用 git 进行初始化,这样我就要一个默认的 master 分支了,不管三七二十一,我先存个档。

image.png

然后我新建了一个 develop 分支,master 分支,我就专门用来管理可发布代码版本,而我主要的核心开发工作,我就放在 develop 分支里面进行。

image.png

那我首先要切换到 develop 分支,然后我开始开发我的个人网站的基本布局,开发完之后,我存个档,接着我继续开发我的个人网站的网页内容,然后开发完成之后,我又存个档,然后我继续开发网站的注册登录功能,开发完之后, 我再存个档。

image.png

image.png

存完档之后呢,我觉得我的网站暂时可以上线了。那么我就要把 develop 分支,合并到 master 分支上,切换回 master 分支,然后把 develop 分支合并起来,合并过来之后,master 分支上就有最新的可上线的网站的代码,然后我就可以用 master 分支上的代码进行分布,让我的网站上线。

image.png

develop 分支虽然被合并了,但合并只是把 develop 分支最后一个存档记录,复制合并到了 master 分支的最后一个存档记录上,并没有删除 develop 分支,所以当网站上线之后,我可以继续在 develop 分支上,接着开发网站的其他功能,比如说我开发了一个留言板功能

image.png

然后存个档

image.png

这个时候,我突然发现,我的网站上有个 bug,于是我就要先切换到 master 分支,然后在 master 分支新建一个 bugfix 的分支,接着我切换到 bugfix 分支,然后进行一顿疯狂的操作和修改,我修改完之后,然后提交一下,做一下存档。

image.png

接着切换回 master 分支,再把 bugfix 分支合并过来,这样就完成了 bug 的修复。之后我就可以用 master 分支下的新的代码,重新部署网站。

image.png

接着我可能还要把 master 上的代码,合并到 develop 分支上,这样可以把 develop 分支中,存在的 bug 问题解决了。

image.png

毕竟别忘了 master 分支的代码,之前是 develop 分支上合并过来的,最后我又可以继续在 develop 分支上,开发我的网站其他功能了,等到下一个阶段的功能都开发好了,然后我又再把它合并到 master 分支,然后再用 master 分支上的代码,进行网站的部署。

上面是最最简单的分支的用法,真正的团队在代码开发中,对于分支的使用是更加严格,更加规范的。

如果你是一个个人开发者,那你完全可以根据自己的需求,合理的使用分支,

所以使用分支,能让各个业务代码保持独立,不同的代码处理需求,可以分开同步进行的,避免互相影响。完成之后,可以再合并到专门用来发布代码的 master 分支。

image.png

上面截图的这些功能,就是 git 实现代码版本管理控制的核心了。

我们学习了 git 的最重要的一些概念,希望这些内容能让你大概明白,Git 是如何帮助我们实现文件和代码版本管理的,明白这些之后,会非常有助于去学习,如何具体的使用 git。

直白的语言对应的 git 命令

直白的语言git 命令
使用 git 对文件夹进行初始化git init
告诉 git,你要对哪些文件进行存档操作,将对应的文件添加到暂存区git add <file>,示例:git add test.txt
添加到暂存区之后,让 master 管理员,帮我们做个存档,生成一个存档记录git commit -m <message>,示例:git commit -m '实现了网站登录功能'
有多个存档记录的时候,在各个记录档案之间切换git reset --hard commit_id,commit_id 是对应的存档记录
git 帮你召唤了一个名叫 fixbug 的新档案管理员git checkout -b <name>或者git switch -c <name>,示例:git checkout -b fixbug 「创建+切换分支」
切换到新的分支 fixbuggit checkout <name>或者git switch <name>,示例:git checkout fixbug
切换回 master 分支,然后把 develop 分支合并起来git checkout master
git merge develop
在 develop 分支开发新功能,发现我的网站上有个 bug,切换到 master 分支,然后在 master 分支新建一个 bugfix 的分支git checkout master
git checkout -b bugfix
修复完 bug,切换回 master 分支,再把 bugfix 分支合并过来git checkout master
git merge bugfix

常用的 git 命令

  1. git clone <git@github.com>:xxxx,下载仓库
  2. git init,初始化本地仓库 .git
  3. git status -sb,显示当前所有文件的状态
  4. git add 文件路径,用来将变动加到暂存区
  5. git commit -m "信息",用来正式提交变动,提交至 .git 仓库
  6. 如果有新的变动,我们只需要依次执行 git add xxx 和 git commit -m 'xxx' 两个命令即可。先 add 再 commit,行了,你学会 git 了。
  7. git log 查看变更历史
  8. git pull 取回远程主机某个分支的更新,再与本地的指定分支合并
  9. 查看分支:git branch
  10. 创建分支:git branch <name>
  11. 切换分支:git checkout <name>或者git switch <name>
  12. 创建+切换分支:git checkout -b <name>或者git switch -c <name>
  13. 合并某分支到当前分支:git merge <name>
  14. 删除分支:git branch -d <name>

参考

写到最后

通过这篇文章,希望能帮助大家了解到 Git 是如何帮助我们实现文件和代码版本管理的,理解 Git 的工作原理。

文中如有错误,欢迎在评论区指正,如果这篇文章帮助到了你或者喜欢,欢迎点赞和关注。