本讲义以一个Git学习网站为参考而编写,这个网站具体与可见,可以把git代码式的命令转为图形动态演示。
目录
Git简单介绍
Git官网是这样介绍它自己的产品的:
"Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency."
百度百科的翻译我就不贴过来了,简单来说,Git就像是电脑上的ctrl + s,但功能远比safe复杂,同时也好用得多。Git支持在保存的同时,保留不同时间,不同内容的文件,我们称之为“版本”……还有一些更复杂但同时也更有意思的操作,以后会介绍。

Git技巧
主要元素介绍
注意:
这里用的表示都是上文提到的git学习网站的表示
Cn (n为数字) 提交记录
main 主分支
* 当前位置
箭头 指示提交前后顺序
主要命令1:
commit
commit命令把本地文件直接push到git仓库,而不是存储到缓存库中
这个命令进行一次提交,在当前位置下面(*号的位置)再次提交一次,同时当前位置也变换到最新一次提交标题
git commit
主要命令2:
branch
branch可以创建一个分支,就像树上长出了另外的枝条
而且需要注意的是,不用担心多建分支会占用过多的空间,相反,多建分支有利于保存你在不同时期写下来的想法,有利于以后的维护与更新
git branch <branchname>
这里创建了一个分支,但是需要注意的是,这个分支现在是与main分支是同步的,然后如果这里再进行一次提交会发生什么,来看看:
git commit
敲重点:
这个分支看起来不是我们所想的变成两条线,而是仍停留在同一个枝干上,但是如果再看的仔细一点,我们会发现其他的特点,那就是每次提交都是在main*这个位置再往下提交一次
如果我们想切换到我们新创建的分支,可以试试以下的命令:
主要命令3:
checkout
git checkout <branchname>; git commit
注意:这里的;号是隔开两个命令,在当前环境适用,但是可能不会在别的环境适用
这是结果:
可以看的,git首先把*号挪到了newImage这个新分支上面,然后在newImage这个分支上往下提交了一次,这样留在原地的就是main分支
注意:Git的2.23版本中引入了switch命令,功能是与checkout差不多的,但是细节方面可以去RTFM(下图的“这里”的链接),另附:
高级命令
git checkout -b <branchname>
这个命令可以创建新分支的同时切换到那个分支,但是我作为一个半入门者,我觉得先把前两个初级的命令搞懂逻辑之后再学会更有益一点,别到时候忘了这个高级命令(毕竟还是有点难记的)的时候初级命令也忘了怎么用
主要命令4:
merge
这个命令适用于把两个分支合并到一起,然后“产生一个特殊的提交记录”,教程如是说,让我们看看到底怎么特殊
现在我们有以下的提交(晚点我研究以下是怎么做到有两个分支的),输入以下命令:
git merge <branchname>
会有以上的变化
注意:
我们要牢记,git的提交永远都是从*所在的位置进行提交,这里执行的命令也是,它创建的新分支在*号原来在的位置的下方,这个提交同时把bugFix和*所在的分支一起合并然后提交。
然后……然后,作者闲着没事又把bugFix和*号所在的main合并提交,最终产生了以下的结果:
输入:
git checkout bugFix; git merge main
## 这里也用分号表示运行两次,不是什么特殊语法 ##
## 这里的branchname用了具体名字,不想把读者搞晕 ##
结果为:
注意!
这里先把*号所在的分支切换到bugFix,然后本来是main合并到bugFix,但是因为已经有c4的提交,所以这个提交约等于bugFix变到了main那里。同时,从颜色可以看出c3往后的提交和bugFix的提交颜色是一样的。
##这里作者没有写好,我再想想怎么再解释得清楚一些##
跟merge一起出现的进阶:产生真正的多个分支
这里直接用文字太抽象,所以我觉得还是去试试使用我推荐的Git学习网站边打边写。
输入:
git branch <branchname>
git checkout <branchname>
git commit
git checkout main
git commit
git merge <branchname>
产生两个真正的分支需要的条件:
当前分支下面还有别的分支
这就是最后的输出结果:
主要命令5:
rebase
这个命令的主要功能是合并分支,通过另一种方式。
这个命令和merge不同的点在于,这个命令可以使得提交流程像一直按顺序提交,即使你在提交的过程中产生了多个分支
输入命令:
git rabse main
如图:

我们可以看到,输入这个命令后,整个提交流程就像是main版本后进行了bug的修改
这有点像市面上游戏的更新一样,但是更新肯定不是像右图这样,步一步push上去的不然服务器会崩掉,所以厂家一般是通过左边这种方式,在main版本玩家游玩的过程中发现问题,然后在别的分支修改,最后版本更新时一并push上去。
注意: 以上都是本人观点与猜测,作者不对此负责
接下来,我们留意到,上图的main和bugFix分支还存在不同,相当于游戏本体还在main分支,但是补丁还在bugFix当中,所以,如果要完成一个版本的更新,我们还要做下一步:
把main和bugFix分支合并为新分支
输入:
git rebase bugFix
得到以下结果:

我们留意到,这里c3'的提交颜色已经融合了,说明main和bugFix分支合并了,游戏新版本已经准备好了
好的,至此我们git的基础命令已经学完了
总结一下
主要有4个命令需要我们掌握:
commit 在当前提交
branch 在当前创建分支
checkout 回到某位置
merge 在当前合并分支
rebase 把当面分支移动到目标分支