Git使用心得体会

Git使用心得体会

Git是业界广泛使用的版本控制工具,本次使用Git完成了开发过程中的几种应用场景,主要参考的文献是五⼤场景玩转 Git,只要这一篇就够了!

一、初识Git

Git是2005年由Linus花了两周时间自己用C语言实现的一个分布式版本控制系统,这就是Git的最初版本!在Git推出的一个月之内,Linux系统的源码便由Git管理了!随着软件开发过程中对版本控制的需求不断上升,GitHub网站于2008年上线了,它为开源项目免费提供Git存储。十年之后的2018年,Github被微软以75亿美元收购。

Git常用的有以下6个命令:git clone、git push、git add 、git commit、git checkout、git pull。

image-20201005231856128

说明:

  • workspace:本地工作区
  • staging area:本地仓库暂存区/缓存区
  • local repository:或本地仓库
  • remote repository:远程仓库

二、Git的几个应用场景

根据项目开发过程中代码版本控制的需求,以下针对几个常用的场景演示如何使用Git进行代码的版本控制。

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

使用Git之前,需要在本地创建并初始化本地仓库:

image-20201006003512318

之后使用git status命令可以查看当前工作区的状态,由于该仓库刚完成初始化,此时没有任何记录。

image-20201006003759744

此时我们可以在该文件夹下添加相应的源码文件test.txt之后通过git add test.txt命令将该文件添加到本地仓库缓存区,再通过git commit -m "first commit"命令将其提交到本地仓库中。

image-20201006005243045

提交文件后,我们仍然可以对已经提交的文件进行修改,再次通过git commit -m "second commit"进行提交,此时用git log命令可以查看提交记录。此时可以看到,该master分支一共有两次提交记录。

image-20201006005945204

当我们需要回退到本次代码提交之前的状态时,我们可以使用git reset --hard HEAD^命令回到上一个版本。此处我们回到第一次代码提交后的状态。

image-20201006010810685

若此时我们希望回到最新的版本,可以使用git reflog查看最新的版本号,然后根据版本号使用git reset --hard 命令将当前工作区的代码替换为最新的版本。此处是第二次代码提交后的状态。

image-20201006011215561

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

我们可以先用git clone命令将远程仓库的代码克隆到本地,以建立远程仓库和本地仓库的对应关系,再使用git remote -v命令查看远程仓库的别名的实际链接地址。

image-20201006013400891

Git常用的几个命令中git clonegit pushgit fetchgit 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 远程分支到你所在的分支。

git merge命令官方的解释是Join two or more development histories together,即合并两个或多个开发历史记录。主要用于从远端仓库提取数据并尝试合并到当前分支。假设你配置好了一个远程仓库,并且你想要提取更新的数据,你可以首先执行 git fetch [alias] 告诉 Git 去获取它有你没有的数据,然后你可以执行 git merge [alias]/[branch]以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支。

git pull命令官方的解释是Fetch from and integrate with another repository or a local branch,即从其他存储库或分支抓取并合并到当前存储库的当前分支。

git fetchgit push加上git clone是三个对远程存储库的基本操作,而git pull(拉取)是实际上是git fetch + git merge(合并)的组合。

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

团队项目的每一个开发者都采用的工作流程大致是先克隆或同步最新的代码到本地存储库;然后为自己的工作创建一个分支,该分支应该只负责单一功能模块或代码模块的版本控制;每个项目开发人员在该分支上完成某单一功能模块或代码模块的开发工作;最后,将该分支合并到主分支。这里通过git checkout -b mybranch创建并切换到一个新的分支mybranch。

image-20201006095439748

然后通过git branch命令可以查看项目各分支的状态(带*标记的为当前所处分支)。

image-20201006095550912

在mybranch分支下,我们先创建一个新的文件mybranch.txt,写入内容后将该文件提交到本地仓库。模拟该分支上的开发人员完成了自己的开发工作。

image-20201006100152748

然后我们用git checkout master命令切换回master分支,在该分支上使用 git pull origin master将远程仓库的最新版本同步到本地仓库,再在master分支上使用git merge --no-ff mybranch对master和mybranch分支进行合并。完成合并后,可以使用git ls-files查看当前已提交的文件,在mybranch分支下的mybranch.txt文本文件在查询结果中。最后将合并后的master分支使用git push origin master提交到远程仓库,模拟完成了一项开发任务的场景。

image-20201006101824608

在github远程仓库中,我们可以看到已提交的更新:

image-20201006102551834

场景四:Git Rebase

在软件开发的流程中,有一个朴素的版本管理哲学:开发者的提交要尽量干净、简单。开发者要把自己的代码修改按照功能拆分成一个个相对独立的提交,一个提交对应一个功能点,而且要在对应的 commit log message 里面描述清楚。因此在合并和 push 之前检查修改一下 commit 记录时常需要。而git-rebase 存在的价值是:对一个分支做变基操作,以此来保证commit提交记录的干净整洁。

git rebase的主要应用场景是:当我们在一个过时的分支上面开发的时候,执行 rebase 以此同步 master 分支最新变动;假如我们要启动一个放置了很久的并行工作,现在有时间来继续这件事情,很显然这个分支已经落后了。这时候需要在最新的基准上面开始工作,所以 rebase 是最合适的选择。我们先通过git checkout mybranch切换到mybranch分支,对文件进行修改并提交后使用git log查看提交记录。

image-20201006105417404

此时,执行git rebase -i HEAD^^^命令进入vim界面:

image-20201006105855089

此时将第二次的提交记录删除:

image-20201006110036036

对rebase操作中的冲突文件进行修改,解决文件中的冲突问题:

image-20201006110915643

将修改后的mybranch.txt文件重新进行提交:

image-20201006111919720

再执行 git rebase --continue命令完成变基操作,再通过git log查看提交记录,发现第二次的提交记录已经不存在了。

image-20201006111821373

然后切换到master分支,将远程仓库的master分支最新版本的源代码保存到本地,再执行git merge --no-ff mybranch命令将mybranch和master分支进行合并,最后执行git push命令将更新推送到远程仓库。模拟将一个项目开发完成的情景。

image-20201006112708743

此时登录github,可以看到本次提交的更新:

image-20201006113103250

三、使用Git的心得体会

做这次作业之前,我对于Git的了解仅仅是停留在个人开发过程中对于代码的修改和推送操作上。通过老师在课堂上的讲解,我才明白Git仓库管理的各种实现细节,我对各种常用的命令的使用也通过此次的作业熟练了许多。总体而言,此次作业让我受益良多。

posted @ 2020-10-06 12:56  Coulson123  阅读(663)  评论(0)    收藏  举报