Git使用心得体会
Git使用心得体会
这里先感谢孟宁老师在高级软件工程课上的讲解,以及本文主要的参考文献为五⼤场景玩转 Git,只要这一篇就够了!。
一、初识Git
在写文档的过程中,我们往往需要另存一个独立文件作为备份用以管理我们在写文档的过程中产生的不同版本,这就是版本管理的一个方式。不过这种人工的方式在不同版本的数量庞大时就比较容易显得无能无力,这时就出现了用软件系统作为工具来进行版本控制,即版本控制系统。现在市面上主流的版本控制系统主要分为中心版本控制系统和分布式版本控制系统,而接下来要使用的GIT是目前世界上最先进的分布式版本控制系统。
Git自2005年由Linus花了两周完成以后,发展迅猛,经过了3 年时间到 2008 年,专门提供 Git 存储的 GitHub 网站上线了,它为开源项目免费提供 Git 存储,而到如今 GitHub 已经成为全球最大的程序员社交网站,而Git也是也成为世界上使用最多的分布式版本控制系统。
Git的基本操作如下图所示,主要由pull、push、fetch、clone、add、commit、checkout几个操作组成。具体的操作将在接下来的几个场景的应用中展示

二、Git的几个应用场景
因为VScode的便捷性,接下来的操作均在VScode中完成。
场景一:Git 本地版本库的基本用法
首先在测试文件夹下初始化一个本地版本库:
然后利用git status查看当前工作区(workspace)的状态,因为刚初始化,所以并没有任何的记录。

新建一个文件GitTest,然后通过git add将文件添加到暂存区(Index),然后通过git commit把暂存区的文件提交到仓库,最后用git log查看当前HEAD之前的提交目录。

然后对GitTest文件进行更改保存后,然后进行第二次提交,再次使用git log查看提交记录,发现已经出现了两次提交记录。

接着使用Git reset --hard HEAD^回退一个版本,此时可以发现workspace已经回退到first版本。

接着用git reflog查看当前HEAD之后的版本,并利用git rest重新回到second版本。

场景二:Git远程版本库的基本用法
先通过git clone将GitHub上创建好的版本库克隆到本地完成本地版本库的初始化。

再使用git remote -v查看详细的远程存储库信息,包括fetch和push的远程存储库URL。

从参考文献中我们可以容易知道git clone、git push、git fetch 、git merge和git pull操作的实际意义。
git clone命令官方的解释是Clone a repository into a new directory,即克隆一个存储库到一个新的目录下。
git push命令官方的解释是Update remote refs along with associated objects,即将本地存储库的相关数据对象更新到远程存储库。
git fetch命令官方的解释是Download objects and refs from another repository,即下载一个远程存储库数据对象等信息到本地存储库。
git merge命令官方的解释是Join two or more development histories together,即合并两个或多个开发历史记录。
git pull命令官方的解释是Fetch from and integrate with another repository or a local branch,即从其他存储库或分支抓取并合并到当前存储库的当前分支。
git fetch、git push加上git clone是三个对远程存储库的基本操作,而git pull(拉取)是实际上是 git fetch + git merge(合并)的组合
场景三:团队项目的分叉合并
团队开发需要为自己的工作创建一个分支,该分支应该只负责单一功能模块或代码模块的版本控制,在该分支上完成某一单一功能模块或代码模块的开发工作后,再将其合并到主分支。为此我在VScode中创建了一个新的分支mybranch,并使用git checkout来改变工作区所处分支状态(*代表当前工作区所处位置)。

然后在该分支下新建文件mybranch,然后进行提交。

然后切换回main分支,将远程origin/main同步最新到本地存储库,再合并mybranch到main分支,推送到远程origin/main之后,即完成了一项开发工作。

同时可以看到在GitHub上已经完成了更新。

场景四:Git Rebase
首先需要介绍下git merge和git rebase的区别:
git merge 操作工作原理就是:git 会自动根据两个分支的共同祖先,即最近的commit和两个分支的最新commit进行一个三方合并,然后将合并中修改的内容生成一个新的 commit, 这是merge的效果,简单来说就合并两个分支并生成一个新的提交。
而git rebase操作实际上是将当前执行rebase分支的所有基于原分支提交点之后的commit打散成一个一个的patch,并重新生成一个新的commit hash值,再次基于原分支目前最新的commit点上进行提交,并不根据两个分支上实际的每次提交的时间点排序,rebase完成后,切到基础分支进行合并另一个分支时也不会生成一个新的commit点,可以保持整个分支树的完美线性。
利用git rebase -i HEAD^^^得到下列结果:

进入到编辑模式后,此时将版本two删除,并合并版本,保存退出,此时出现如下提示:


打开冲突的文件,情况如下:

在这里,我选择采用传入的更改,然后使用git add将文件存入暂存区,然后使用git rebase进入文本编辑器修改C版本的提交日志,保存并退出后得到下图。


此时再用git log查看历史提交记录two版本已经不存在了。

然后切换回main分支,将远程origin/main同步最新到本地存储库,再合并mybranch到main分支,推送到远程origin/main之后即完成了一项开发工作。

在GitHub上也可以看到已经完成了更新。

至此,四个场景的应用到此结束
三、心得体会
通过这次作业,了解了Git的一些基础使用方法,理解了部分Git的原理,在几个场景的实践中加深了理解,明白了为什么Git被称为当前世界上最先进的分布式版本管理系统,我觉得这对于之后软件工程的学习意义深远,希望在接下来的课程中能够更好的掌握Git的使用。
浙公网安备 33010602011771号