初识Git——所学与体会
由于在本科阶段缺少项目经历,所以并没有学习使用过Git,但在身边同学的耳濡目染下,一直知道Git是一个很方便的版本控制系统。上节课听完孟宁老师对Git在不同场景下的应用介绍后,我对Git有了一个初步的认识,学习到Git的起源、分布式性质以及一些常用命令。孟宁老师不仅向我们展示了如何在不同场景下使用Git,还告诉我们每一步操作背后Git都做了哪些工作。但由于我从没有动手使用过Git,对每一个命令都比较陌生,所以准备在下面的动手实践中逐步掌握对Git的初步使用。
参考文献:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg
https://www.liaoxuefeng.com/wiki/896043488029600
环境:Windows、VSCode
(一)、环境搭建
1、下载VSCode并下载Git,下载安装的步骤就不再赘述。
2、将Git Bash集成到VSCode中。


3、重启VSCode后可以看到终端已经变成Git Bash。

(二)、五大场景的基本使用训练
场景一:Git本地版本库的基本用法
1、在VSCode的项目目录下创建一个版本库,并通过命令 git init 把这个目录变成Git可以管理的仓库。运行该命令后,当前目录下会出现一个名为“.git”的文件夹,这是Git用来跟踪管理版本库的。

2、在当前目录下创建一个README.md文件,可以随意输入一些内容。
3、通过 git add [FILENAME] 命令把当前文件添加到暂存区中。

4、再使用 git commit -m "[Introduction]" 命令,将上一步添加到暂存区的文件添加到仓库中。

5、更改文件,通过命令 git status 查看当前工作区状态,再次提交"README.md"文件,形成第二个版本。

6、结合使用 git log 、 git reflog 、 git reset --hard commit-id的头几个字符 ,实现回到过去和回到未来。


场景二:Git远程版本库的基本用法
1、注册Github账户并配置SSH加密协议(略)。
2、在Github上创建一个仓库并通过命令 git remote add origin [仓库链接] 将本地仓库与远程仓库关联起来,再通过命令 git push -u origin master 将本地仓库的内容推送到Github的仓库中去。

推送成功后,远程仓库就拥有和本地仓库一样的内容:

从现在起,只要本地做了提交,就可以通过命令 git push origin master 把本地“master”分支的最新修改推送到Github。
3、如果从零开始开发一个项目,最好的方式是先创建远程库,然后每个人从远程库克隆一份到本地进行开发。先在Github上创建一个远程库,

然后在bash中输入命令 git clone [仓库链接] ,仓库就会被克隆到本地,并且里面的README.md文件也出现在本地仓库目录中。

场景三:团队项目中的分叉合并
这里我通过在不同目录下创建两个工作区来模拟多人协作中的分支合并。
1、git_repository还是当做我本人的工作区,然后我通过命令 git checkout -b mybranch 创建一个名为“mybranch”的分支当做我的工作分支,而master还是主分支,且通过命令 git branch 可以看到所有分支,分支前带“*”的是当前分支。

2、由于当前分支是mybranch,所以现在修改文件后再进行提交其实是在mybranch分支上提交,而master分支是没有动的。比如我修改文件README.md,然后提交,

此时的分支图应该是这样,master还停留在上一次提交的位置,

所以再将当前分支切换回master后是看不到在mybranch分支上对README.md文件的修改的。
3、要想在主分支上看到在my branch分支上对文件的修改,就要将my branch合并到主分支上。使用命令 git checkout master 将当前分支切换为主分支,然后使用 git merge [branch name] 命令将分支合并到当前分支上。

此时的分支图是这样的:

这就是合并,合并后就能看到刚才在my branch分支下对README.md文件的修改了。
4、合并后就可以将仓库push到远程仓库上,push的操作在场景二中已经使用过,这里就不再赘述,但要注意要把master和mybranch两个分支都push到远程。
5、模拟另一位开发者Tom从远程仓库克隆,先为Tom建立一个本地仓库,然后使用 git clone 命令将远程仓库克隆到本地。

此时使用命令 git branch 只能看到master分支,Tom若想在我的my branch分支上开发,就必须使用命令 git checkout -b mybranch origin/mybranch 创建远程origin的mybranch分支到本地。

这样,Tom就可以在mybranch分支上修改文件,然后时不时把文件push到远程。
6、当多位开发人员都对远程的同一分支进行提交时就会发生推送冲突。解决方法很简单,先使用命令 git pull 从远程将最新的提交抓取下来,然后在本地进行合并,解决冲突,再推送就可以了。
$ git pull Already up to date.
这样,就实现了一个简易的团队项目的合作流程。
场景四:Git Rebase
- rebase操作可以把本地未push的分叉提交历史整理成直线;
 - rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
 
1、查看前面的提交历史,使用 git log 命令,这里共有四次提交记录。

2、然后使用 git rebase -i HEAD^^^ 命令进入一个类似vim的文本行编辑器界面,这是用来指定整理HEAD之前的三个commit节点。

3、然后将第二个提交,也就是描述为"commit mybranch"的提交前面的pick改为squash,这是用来将第二个提交和前面一个提交合并的命令,然后输入“:wq”保存并退出,会是这样的界面。

4、退出后,两个提交就合并完成了。


5、将master分支push到远程仓库后,可以看到这里的两个提交已经合并为一次提交了。

当多人在同一分支上协作时,很容易出现冲突,每次push之前都要先pull,在本地合并后才能push成功。多次这样操作后,Git的提交历史就会很乱,而 git rebase 通过将本地的提交挪动位置,将整个提交历史变成一条整齐的直线,这样看上去就很直观。
(三)、心得体会
在完成作业的过程中,我了解到Git是一个很方便的分布式版本管理系统,也逐步掌握了Git的基础使用方法。
在学习Git对本地仓库的管理过程中,我学习了使用 git init 来创建仓库,使用 git add 和 git commit -m 来提交文件到仓库,使用 git log 、 git reflog 结合 git reset --hard [commit id] 实现回到过去和回到未来等等。在学习对远程仓库的管理过程中,我学会了将本地仓库push到远程仓库以及将远程仓库克隆到本地目录中。在学习多人协作中Git的分支合并时,我才真正了解了Git是如何通过分支和合并的操作来贯彻分布式的概念,学会了在一个多人项目中如何使用Git的分支功能进行自己的开发工作然后再使用GIt的合并功能将自己的工作融合到项目中。最后我还学习了有关Git Rebase的简单使用。
我深知,我还只是刚刚认识Git,还有很多知识要去了解、去实践,比如说我还是没有切身体会到Git的分支合并功能并且对Rebase的使用也只停留在最简单的层面上。但尽管这是我第一次接触Git,我还是能感觉到它带给软件开发人员极大的便利。所以我觉得GIt是我一定要掌握的技术之一,要在今后的学习工作中重点学习并应用。
                    
                
                
            
        
浙公网安备 33010602011771号