Git初体验
进入软件学院学习以后,我选了孟宁老师的高级软件工程这门课,在这门课上对于Git和Github有了进一步的了解。这里我将就我使用Git的初次体验作一个总结。
Git简介
什么是Git?
Git是一个开源的分布式版本控制系统,用以有效、高速地处理很小到非常大的项目版本管理。那什么是版本控制系统?相信很多人都有用Microsoft word写论文并反复改动的经历,如果改动过后还想保留原版本的文件,每次改动前后都需要把当前文件另存为一个新文件,这样一直改下去,就会产生许多个文档。而如果想从这些文档中找到其中某次改动后的文档,是十分困难的。
而如果这次任务需要多人合作完成,情况就更糟了。成员A写完属于自己的部分后,需要将文件发送给成员B,然后A继续修改自己的部分,B完成后将文件传回给A。这时成员A还得想想这期间自己所做的改动并将改动与B的部分合并,这就更加麻烦了。
以上情况其实就是在手动管理多个版本,而版本控制系统就是用软件系统作为工具替代手动来进行版本管理。Git则是目前世界上最先进的分布式版本控制系统,没有之一。
安装Git
目前,Git可以在Linux、Unix、Mac和Windows这几大平台上正常运行。
在Windows上安装Git,可以从Git官网上直接下载安装程序,然后按默认选项安装即可。安装完成后,在开始菜单中找到"Git"->"Git Bash",点击后会弹出如下窗口,说明Git安装成功。

接下来要配置自己的用户名和邮箱,在命令行输入:
$ git config --global user.name "Your name"
$ git config --global user.email "email@example.com"
配置完成后,输入:
$ git config user.name
$ git config user.email
以上两行代码可以分别查看已配置的用户名和邮箱。
值得一提的是,从开始菜单中执行Git Bash,默认在"C:\Users\..."文件夹下,需通过命令操作才能进入准备建立本地仓库的文件夹下。更方便的做法是,我们先定位到准备作为本地仓库的文件夹,在文件夹上单击鼠标右键,在弹出的快捷菜单中单击执行"Git Bash Here",后续操作同上。
如果还想要配置Github,将本地仓库与远程仓库相连,可参见此教程:https://blog.csdn.net/fylstudio/article/details/79106331
Git的使用——五大场景
接下来,我们就可以在Visual Studio Code中使用Git,具体可分为五大场景。
场景一:Git本地版本库的基本用法
首先,我们需要初始化一个本地版本库(repository)。
在VSCode中打开文件夹(Ctrl+O),如果项目文件夹里没有Git存储库,打开源代码管理(Ctrl + Shift + G),直接点击“初始化存储库”,即可初始化一个Git本地版本库,如下图所示。

若使用命令行,可以在之前点击"Git Bash Here"弹出的命令行窗口执行git init命令,或者在VSCode中打开终端(Ctrl+ Shift + `),输入git init也可完成初始化一个Git本地版本库,如下图。

如果已经在github上创建了版本库,可以通过git clone 命令,将版本库克隆到本地完成本地版本库的初始化。
版本库建好后,我们可以看到在当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的。
接下来我们可以在myfirstwork目录下编写一个文件,点击左侧的"+",暂存更改


如上图所示只要在“暂存的更改”列表里的文件上点击减号“-”即可取消暂存更改
我们也可以使用git add、git reset命令完成这一操作。

如果要将暂存区的文件提交到仓库,打开源代码管理,只要“暂存的更改”列表里有文件就可以直接点击对号提交,在如下标签栏中也可以提交及撤销提交。

使用命令行进行相应操作具体如下:
将暂存区里的文件提交到仓库:

查看提交日志:

让HEAD回退到其前两个版本:

查看当前HEAD之后(时间更晚)的提交记录:

场景2:Git远程版本库的用法
前面提到,如果我们已经在Github上创建了Git版本库,可以通过git clone命令将版本库克隆到本地完成本地版本库的初始化。
git clone https://DOMAIN_NAME/YOUR_NAME/REPO_NAME.git
或者在VSCode中打开源代码管理,点击“克隆存储库”,输入存储库URL,点击Enter即可将该版本库克隆到本地。

克隆完成后可以通过git remote 看到默认的远程存储器的名称:
![]()
使用git remote -v 可以查看更详细的远程存储库信息:

对于一个单人项目,对代码修改之前要首先进行代码同步操作,防止产生分叉和冲突。

如果出现无法同步的情况,这时候需要在本地解决冲突:首先我们通过git pull拉取远程仓库里的提交项到本地仓库并合并到当前分支。在VS Code中版本库有一个菜单命令可以完成git pull的功能,如下图:

最后通过git push将本地仓库中的提交项推送到远程仓库,即可完成本地仓库和远程仓库的同步,如下图。

场景三:团队项目中的交叉合并
当我们需要进行团队项目合作时,每个成员为自己的工作创建分支,完成工作后将其合并到主分支是必要的。
在VS Code中创建分支方法如下。

使用git命令方法如下:

使用git branch查看分支列表:

使用git checkout签出到工作区,可完成分支转换。

合并分支方法如下:

也可使用如下命令:

如果要保留mybranch分支为一段独立的分支线段,则需关闭“快进式合并”,具体如下:

场景四:Git Rebase
上一节中提到了多人合作项目,如果多人在同一个分支上协作,很容易出现冲突即使没有冲突,提交记录也会很乱,这时如果在场景三的工作流程中,每个人在完成自己的工作以后,用git rebase整理一下提交记录,把分叉的提交历史“整理”成一条直线,看起来就会更直观,log记录将来就更容易参考。
git rebase命令格式大致如下:
git rebase -i [standpoint] [endpoint]
在终端输入如下命令,会打开命令行文本编辑器,如图:


撤销git rebase方式如下:

如果我们在文本编辑器中编辑删除某一行,例如“pick caf075f master”,然后保存退出(:wq),则会产生冲突,这时需要根据提示选择保留哪个更改即可。
最后通过git push操作将本地分支推送到远程,远程分支的提交历史也是一条直线。
场景五:Fork + Pull request
为了解决开源社区松散团队的问题,Github提供了Fork + Pull request的协作开发工作流程。
当你想更正别人仓库里的Bug或者向别人仓库里贡献代码时,要走Fork+ Pull request的协作开发工作流程:
- 1 先 fork(分叉) 别人的仓库,相当于拷贝一份;
- 2 做一些 bug fix或其他的代码贡献;
- 3 发起 Pull request 给原仓库;
- 4 原仓库的所有者 review Pull request,如果没有问题的话,就会 merge Pull request 到原仓库中。



参考文献:

浙公网安备 33010602011771号