我的git使用心得
------------恢复内容开始------------
本学期有幸选到了孟宁老师的《高级软件工程》这一门课程,听了前几节课程,发现这是一门非常实用的课程,课程的开始便介绍了一些实用工具,如git,vscode的使用。正如课上所介绍的,git作为目前最先进的版本管理系统,对大型的软件开发,起到尤为重要的作用。而作为软件工程师的我们,同样也需要掌握这一门工具。
而本文将由课程内容出发,记录一次我在我的团队里使用gitlab的一次记录。
参考文献:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg
准备工作
首先介绍一下git基本的概念
- 工作区:就是你在电脑里能看到的目录。
- 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
- 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

本次实验也将围绕我在一个项目组实际开发的过程进行一次git的使用,项目组使用的的代码管理工具是gitlab,所以本次实验也将使在gitlab中完成对一次团队合作
场景一:Git本地版本库的基本用法
因为之前有使用过git的经验,所以对于git config配置邮箱和用户名不作过多的赘述
1,vscode 以及 git 的下载不做过多的赘述,下载完成后打开vscode,
为了便于开发的便利,不需要每一次都打开使用git bash,所以需要将终端设置为bash
进入设置,打开terminal.integrated将treminal.integrated.shell.windows的地址设置为git bash 的exe的地址。
此时重启vscode 就可以使用bash的终端,而不用每一次都打开git bash


修改完成后如图
2,新建一个文件夹,然后使用git init 命令将其初始化为本地仓库,并使用git log查看
此时本地处于master分支,且工作区很干净没有东西需要提交

此时新建文件readme.md然后编辑内容并保存,然后打开vscode的源代码管理工具,发现此时有为跟踪的更改
如图

接着使用git add .将修改提交到暂存区,然后使用git status 查看 仓库状态

此时发现,有暂存区里面有修改需要被提交了,是一个new file :readme.md 的文件需要被提交,而在vscode里面也能查看到刚刚暂存的更改。
接下来,使用git commit -m 命令提交更改,再使用git log 查看记录可以发现

此时 修改已经被成功提交,而在log中也记录下这一次操作的名称,以及修改者以及修改时间。
而在此也完成了一次基本的修改提交操作,接下来,便要进入场景二,对远程仓库的操作和使用,
场景二:Git远程版本库的基本用法
由于我所在的项目组使用的是gitlab,进入项目组的gitlab网址,成功登录后可以看到项目组的所有项目
如图

而今天我们需要对zhitiao-admin也就是第一个项目进行部分修改,所以需要点进项目,找到http地址使用git clone 命令 将远程仓库clone到本地



此时可以在本地仓库成功clone到远程仓库了。现在就可以打开zhitiao-admin 进行项目的开发。
进入项目首先将本地分支使用git checkout -b 切换到Lucas分支

接着对项目进行部分修改,今天我要对项目中的dashboard 的index.vue 文件进行修改
然后在本地完成场景一的所有操作如图

点开gitlab上,也能成功的查看到自己提交了修改,并且看到远程master之前进行的提交。
此时我突然意识到一个问题,由于我一直在Lucas分支进行开发,在远程仓库里,我之前的最新提交也在Lucas的分支之中,此时本地仓库虽然切换到了Lucas分支,但是现在拉取的还是远程master分支,为了不在远程仓库新建一个分支,我将git push 的操作留到场景三种进行。
场景三:团队项目中的分叉合并
在场景二中,我在本地已经处于Lucas分支,但是此时的Lucas分支是新的本地Lucas分支,现在还没有merge远程的Lucas分支,也就是说,我现在需要对我之前远程仓库的Lucas分支进行merge操作,远程Lucas分支实际上是超越master分支几个版本的
首先使用 git fetch origin抓取远程仓库

此时发现团队里,有一个Jack分支的提交,但是与我无关,我只需要合并Lucas分支并在我的分支继续进行开发就行。
我的Lucas分支超越master分支几个版本,大概可以用下图示例

再使用git merge origin/Lucas,对Lucas分支进行合并

此时发现,新增了许多文件,这就是由于,之前我在Lucas分支上开发了许多新功能,但是项目组长还未将这些功能合并到master分支上面,而我的本地Lucas应该与远程Lucas分支进行同步,所以此时需要进行一次git merge的操作。
此时使用 git log 查看

可以查看到我之前在Lucas分支上进行的更改,并且和这次更改一起按序排列出来。
完成merge操作过后则需要将本次更改push到远程仓库,此时直接使用git push
emmmm此时发现一个问题,虽然本地分支名字与以前一样叫Lucas,但使用git push的时候,会显示没有上游分支,此时不能直接使用git push 则需要指定远程分支Lucas

现在则推送成功了,本地刚刚对index文件的修改则被成功推送到了远程仓库。

在实际的开发过程中,merge时有可能会遇到冲突,此时则需要解决完冲突,才能提交修改
场景四:Git rebase
由于在在本地开发的时候,或有很多次git commit的操作,然后在大量的commit之后,然后merge的话,会使我们的历史记录变得臃肿且难以阅读
而此时则需要使用git rebase的的命令来时 简化我们的记录,使记录变得简单易读,对于团队的开发能够起到比较好的作用

此时假如我新增了3次更改如图

但是假如此时合并的话,就会将这三次修改按序全部显示在log中,但实际上,我对div的的3次修改完全可以归为一次大的,修改div。
此时为了记录变得简单清晰,则可以使用git rebase操作
键入git rebase -i HEAD^^^命令整理三个版本,进入vim编辑模式
按i进入
删除 修改div3 修改div2 这两次记录
按esc退出编辑模式,并按:wq 保存并退出

此时使用git log 查看发现
、
只有修改div1的操作了,这样记录就变得简单干净了许多。
总结
虽然之前有用过git,但在这次试验中,加深了对git的理解与认识,而且使用了一些之前没有用过的命令,比如git rebase,在以后实际的开发过程中,
对git的使用也会更加的熟练
------------恢复内容结束------------
浙公网安备 33010602011771号