Git使用心得体会

Git使用心得体会

这里先感谢孟宁老师在高级软件工程课上的讲解,以及本文主要的参考文献为五⼤场景玩转 Git,只要这一篇就够了!

一、初识Git

在写文档的过程中,我们往往需要另存一个独立文件作为备份用以管理我们在写文档的过程中产生的不同版本,这就是版本管理的一个方式。不过这种人工的方式在不同版本的数量庞大时就比较容易显得无能无力,这时就出现了用软件系统作为工具来进行版本控制,即版本控制系统。现在市面上主流的版本控制系统主要分为中心版本控制系统和分布式版本控制系统,而接下来要使用的GIT是目前世界上最先进的分布式版本控制系统。

Git自2005年由Linus花了两周完成以后,发展迅猛,经过了3 年时间到 2008 年,专门提供 Git 存储的 GitHub 网站上线了,它为开源项目免费提供 Git 存储,而到如今 GitHub 已经成为全球最大的程序员社交网站,而Git也是也成为世界上使用最多的分布式版本控制系统。

Git的基本操作如下图所示,主要由pullpushfetchcloneaddcommitcheckout几个操作组成。具体的操作将在接下来的几个场景的应用中展示

git基本操作

二、Git的几个应用场景

因为VScode的便捷性,接下来的操作均在VScode中完成。

场景一:Git 本地版本库的基本用法

首先在测试文件夹下初始化一个本地版本库:image-20201005143552190

然后利用git status查看当前工作区(workspace)的状态,因为刚初始化,所以并没有任何的记录。

image-20201005143719527

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

image-20201005144853247

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

image-20201005145351810

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

image-20201005145656493

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

image-20201005150011185

场景二:Git远程版本库的基本用法

先通过git cloneGitHub上创建好的版本库克隆到本地完成本地版本库的初始化。

image-20201005151543823

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

image-20201005152131233

从参考文献中我们可以容易知道git clonegit pushgit fetch git mergegit 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 fetchgit push加上git clone是三个对远程存储库的基本操作,而git pull(拉取)是实际上是 git fetch + git merge(合并)的组合

场景三:团队项目的分叉合并

团队开发需要为自己的工作创建一个分支,该分支应该只负责单一功能模块或代码模块的版本控制,在该分支上完成某一单一功能模块或代码模块的开发工作后,再将其合并到主分支。为此我在VScode中创建了一个新的分支mybranch,并使用git checkout来改变工作区所处分支状态(*代表当前工作区所处位置)。

image-20201005160917909

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

image-20201005161037334

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

image-20201005161245513

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

image-20201005161411446

场景四:Git Rebase

首先需要介绍下git mergegit rebase的区别:

git merge 操作工作原理就是:git 会自动根据两个分支的共同祖先,即最近的commit和两个分支的最新commit进行一个三方合并,然后将合并中修改的内容生成一个新的 commit, 这是merge的效果,简单来说就合并两个分支并生成一个新的提交。

git rebase操作实际上是将当前执行rebase分支的所有基于原分支提交点之后的commit打散成一个一个的patch,并重新生成一个新的commit hash值,再次基于原分支目前最新的commit点上进行提交,并不根据两个分支上实际的每次提交的时间点排序,rebase完成后,切到基础分支进行合并另一个分支时也不会生成一个新的commit点,可以保持整个分支树的完美线性。

利用git rebase -i HEAD^^^得到下列结果:

image-20201005202735686

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

image-20201005203658295

image-20201005203819052

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

image-20201005204208341

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

image-20201005204503215

image-20201005204704351

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

image-20201005204831861

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

image-20201005205156675

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

image-20201005205246243

至此,四个场景的应用到此结束

三、心得体会

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

posted on 2020-10-05 22:19  ssssky1  阅读(425)  评论(0)    收藏  举报