Git 项目工作流程演练
作为全球最大的代码托管和写作平台,Github上有很多优秀的开源项目,很多程序员大牛也乐于将自己的代码分享出来,供其他人学习借鉴。而被笑称全球最大同性交流网站的Github,之所以能备受青睐,也离不开其背后的项目版本管理系统Git。
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
接下来我们将通过几个场景来展示如何使用Git进行项目管理。
Git的安装(Windows)
打开官网链接(https://git-scm.com/download/win)下载安装程序,然后一路勾选默认选项即可完成安装。
安装完成后,点击鼠标右键可以看到Git GUI和Git Bash的选项,打开Git Bash,弹出一个命令行窗口,就说明Git安装成功了。
因为Git是分布式版本控制系统,所以还需要在命令行窗口配置用户名和邮箱作为一个标识。
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
除此之外,由于VS Code默认附带了Git的安装,因此通过安装VS Code的方式安装Git也不失为一种绝妙的方式。
而且VS Code提供了源代码管理的图形化界面,让你可以更加高效的进行版本管理。习惯于使用命令行的话,也可以直接在VS Code的终端输入各种命令。
由于用VS Code的图形化界面进行代码管理比较简单明了,因此本文会将以命令行的方式来展示Git在项目中的使用流程,顺便加深对Git命令的了解。
场景一:Git 本地版本库的基本用法
首先,新建文件夹SE作为工作目录,然后在项目根目录下点击Git Bash进入命令行工具,执行git init命令,就可以完成对本地版本库的初始化。

在命令行工具中,输入git status也可以看到当前工作区代码与上一个版本的代码的所有更改。如图所示,可以看到分三个部分:已添加到暂存区等待提交的文件、修改了但还没未添加到暂存区的文件、没有添加到版本库进行跟踪的文件。

在实际开发过程中,最常用到的Git指令就是下面两条指令:
$ git add [FILES] # 把文件添加到暂存区(Index)
$ git commit -m "commit infro” # 把暂存区里的文件提交到仓库

除此之外,在本地项目代码管理的过程中会使用到的Git命令还有:
$ git log # 查看当前HEAD之前的提交记录,便于回到过去
$ git reset --hard HEAD^^/HEAD~100/commit-id/commit-id的头几个字符 # 回退
$ git reflog # 可以查看当前HEAD之后的提交记录,便于回到未来
$ git reset --hard commit-id/commit-id的头几个字符 # 回退

在git log中commit message的存在能让我们清晰得认识到每个commit id所对应的版本,因此在进行版本回退的时候,用commit id进行版本回退的标识还是非常清晰明了的,个人推荐使用这种方式。
场景二:Git 远程版本库的基本用法
为了演练远程版本库的使用,这里通过git clone命令将github中原来的一个微信小程序项目克隆到本地完成本地版本库的初始化。

完成初始化后,可以通过git remote命令查看远程版本库的信息:
$ git remote # 不带参数,列出已经存在的远程分支
$ git remote -v # 列出详细信息,在每一个名字后面列出其远程url

实际开发过程中,对远程版本库的基本操作还有:
$ git fetch # 下载一个远程存储库数据对象等信息到本地存储库
$ git merge # 合并两个或多个开发历史记录
$ git pull # 从其他存储库或分支抓取并合并到当前存储库的当前分支
$ git push # 将本地存储库的相关数据对象更新到远程存储库
其中,git pull相当于git fetch 和git merge两个操作的组合,因此最常用的还是pull(拉取)和push(推送)操作。
为了演示,直接对github远程库上的readme.md文件进行修改,然后执行pull操作:

在VS Code修改后,先执行场景一中的git add和git commit命令,然后执行push操作即可将修改后的代码上传到github的远程库中:

场景三:团队项目中的分叉合并因此
在团队项目中,会有对人同时向远程主分支频繁提交代码的现象,需要进行大量的冲突合并,且log记录中提交在一条时间线上,不利于跟踪代码成长轨迹。因此推荐的团队项目开发工作流程为:
- 克隆或同步最新的代码到本地存储库;
- 为自己的工作创建一个分支,该分支应该只负责单一功能模块或代码模块的版本控制;
- 在该分支上完成某单一功能模块或代码模块的开发工作;
- 最后,将该分支合并到主分支。
关于分支的基本命令有:
$ git checkout -b <branch_name> #创建并切换到指定分支
$ git branch # 查看所有分支,* 号代表当前工作分支
$ git checkout <branch_name> # 切换到指定分支
$ git branch -d <branch_name> # 删除分支
$ git merge <branch_name> # 将指定分支合并到当前分支
在命令行工具中创建新分支branch1,并切换到master分支:

在VS Code中branch1分支下修改代码,执行git add和git commit命令,然后在命令行工具中master分支下pull远程master分支代码同步最新到本地存储库,合并branch1分支以及删除分支:

最后push到远程master分支,这样就完成了一次开发的基本工作流程,并且会在Git分支网络图中留下清晰的项目推进路线。
其中合并分支时使用--no-ff参数后,会取消默认的快进式合并,执行正常合并,在master分支上生成一个新节点,在github中可以看到网络图如下:

场景四:Git Rebase
一般开发过程中开发者实现一个独立的功能就会进行一次提交,因此最后的log日志会比较复杂,因此这个场景就是演练如何使用git rebase命令将本地零散的提交记录进行整理,从而使Git分支网络图更加简洁明了,而不至于冗余繁杂。
接下来将按照下面的分支网络图来演示git rebase命令的用法:

在命令行工具中创建新分支branch2,依次修改代码提交两次,commit message分别为A和B,查看log日志如下:

然后使用git rebase命令合并这两次提交:

执行rebase命令时会弹出编辑器如下,选择删除A版本即直接删除"pick bbb3370 A "一行,然后保存退出:

可以看到命令行窗口显示有合并冲突,打开冲突文件选择保留传入的更改解决冲突:

然后用git add命令将修改后的文件存入暂存区,继续执行rebase命令,修改commit message,最后push到github上的远程存储库中:


在github的分支网络图中可以看到只有rebase后的那次提交:

总结
Git是目前世界上最先进的分布式版本控制系统,从上面四个场景的使用来看,Git的学习并不困难,常用的git命令也十分容易记忆,能掌握这样一个工具也会让我们在以后团队项目开发过程中对版本管理更加游刃有余。
最后感谢孟宁老师的教导,本文参考孟宁老师的文章完成,文章链接已列在下方。

浙公网安备 33010602011771号