Git使用心得
Git使用心得
在高级软件工程这门课之前,我只大概了解Git这个版本控制工具,并没有实际操手过,通过孟宁老师的悉心指导,逐渐对Git有了一定的了解,并熟悉了里面的操作。
参考文献:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg
Git的基本操作如下图:

场景一:Git 本地版本库的基本用法
1.初始化一个本地版本库(git init)
首先是安装VS code然后我们打开可以看见此界面:
我们需要初始化一个本地版本库,可以Ctrl+ `打开终端,输入git init 文件夹名称如下:

既创建一个名为test的本地版本库,如果不加文件夹名会在当前路径文件夹建立版本库。
2.查看当前Workspace的状态(git status)

可以看到当前主分支上面还没有提交,我们建立一个文件demo.txt
3.暂存更改的文件(git add filename)

此时我们可以看到已经把demo.txt提交到暂存区了
4.把暂存区里的文件提交到仓库(git commit -m "wrote a commit log infro")

5. 查看当前HEAD之前的提交记录,便于回到过去(git log)

现在我们的提交记录只有一条,我们可以再提交一两次以便实验

我又提交了一个text1.txt文件通过git log 命令我们可以看见已经有两个提交记录了
6.回退(git reset -hard HEAD^^/HEAD~100/commit-id/commit-id的头几个字符)
通过reset命令可以回到之前的记录

这时候我们已经回到提交demo.txt的记录
7.查看当前HEAD之后的提交记录,便于回到未来(git reflog)

8.回到未来(git reset —hard commit-id/commit-id的头几个字符)

现在又回到了提交text1.txt的记录
场景二:Git 远程版本库的基本用法
为了使用git远程版本库的基本用法,我在github上建立了一个remote_repo的仓库,通过git clone命令将其克隆下来

由于是一个空仓库,出现了警告,git remote -v可以看抓取推送的地址

我们在本地建立文件看能不能推送到github上去

在本地建立一个hello.txt文件,将其add commit并使用git push推送到github

去github看看hello.txt是否存在

可以看到hello.txt文件已经存在,现在我们来看一下git pull功能,先在github上将文件内容hello github改成hello git

输入git pull命令


可以看到Vs code上hello.txt内容已经更改为hello.git
场景三:团队项目中的分叉合并
场景二所述的工作是串行的并且及时将本地与远程同步,也就是对于一个单人项目,要么在本地提交代码到仓库,要么通过Web页面更新远程仓库,而且这两种方式不会同时发生。但是当多人团队的时候情况就没有这么乐观了,分叉和合并会产生很多问题,并且整个git log提交记录中多个开发者或多个代码模块的commit是交错排列在同一条时间线上,不利于回顾查看和回退代码,让跟踪代码的成长轨迹变得异常困难。
基于以上想法我们建议团队项目的每一个开发者都采用的工作流程大致如下:
-
克隆或同步最新的代码到本地存储库;
-
为自己的工作创建一个分支,该分支应该只负责单一功能模块或代码模块的版本控制;
-
在该分支上完成某单一功能模块或代码模块的开发工作;
-
最后,将该分支合并到主分支。
在场景二的基础下,我们建立分支 (git checkout -b mybranch)并通过git branch查看是否建立成功并转换,如下图可见已经成功实现

为了实现mybranch合并到master的效果我们在mybranch建立一个文件,text2.txt并且add commit,如下两图可见mybranch比master多了一个text2.txt文件


如果要保存mybranch作为一个独立分支使用--no-ff关闭“快进式合并”,现在我们使用git checkout master转到master分支并且输入命令 git merge --no-ff mybranch来合并mybranch分支,下图可以看到master已经合并了text2.txt文件

场景四:Git Rebase
由于开发者的提交要尽量干净整洁所以我们可以用git rebase来整理提交记录,让log更容易回顾,命令如下:
git rebase -i [startpoint] [endpoint]
其中-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支的HEAD。一般只指定[startpoint] ,即指定从某一个commit节点开始,可以使用HEAD^^、HEAD~100、commit ID或者commit ID的头几个字符来指定一个commit节点。
练习题:

这是master分支上的commit记录我在demo时候创建了一个mybranch分支,并提交了A B commit记录,如下图:

在mybranch分支上使用git rebase master后git log 如下图,mybranch上的记录处在master之后

然后我们转到master分支使用git merge mybranch合并mybranch git log 如下图:

现在我们使用git rebase -i HEAD^^来合并commit 把B的pick改成f即可


可见B commit已经消失了
总结:
Git是目前世界上最先进的分布式版本控制系统,感谢孟宁老师的教导让我们对Git有了一定的了解与应用,在以后的工作中会更加地游刃有余。

浙公网安备 33010602011771号