Git使用心得

参考https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg

孟宁老师的高级软件工程课给我的启发很大,利用课后时间我也仔细学习了一些与git相关的知识。并以孟宁老师的课件为基础对一些场景进行了复现

场景1 Git本地库

首先我们新建了一个文件夹并对其执行git init命令,此时可以看到文件夹内部只有一个隐藏的.git文件夹,其后面会用来储存我们对本地库进行操作的相关信息

在此文件夹下新建一个hello.txt并对其进行编辑

  

此时利用git status查看工作区状态,会发现有一个文件未添加到暂存区,利用git add命令进行添加

此时可以看到我们的文件已经正常添加到暂存区。在提交到本地库之前首先要设置用户,我们此时先设置项目用户

此时的电子邮件地址并不要求准确,只是一个用以区分的工具,我们再对本地库进行提交

上面显示了我们的提交和提交日志。

为了进行版本的更改,我们对hello.txt进行多次修改

我们此时有四条提交记录,在最上方的是此时HEAD指向的版本,每个版本都对应一个hash值,我们利用hash值来进行操作

我们后退后的日志只剩下前两条,但是仍然可以用git reflog命令来对所有的提交进行查看

 

场景2 Git远程库

我们在github上注册账号并添加新的仓库

现在我们需要将本地库中的内容上传到远程库,首先我们对远程库新建一个别名

而后将本地库的master分支推送到远程库

根据弹出的窗口输入账号密码(会在凭据管理器中留存)

此时我们的推送就完成了,在远程库也可以查看

 

场景3 团队项目的分叉与合并

使用git branch命令可以创建一个新分支new_branch

在新分支,我们可以继续编辑hello.txt,并对其执行提交操作

提交后,我们可以直接将两个分支进行合并

我们考虑在新分支和原有的master分支合并时可能出现冲突,我们通过如下方法模拟一个冲突。

我们在new_branch分支中对hello.txt的首部进行修改,在首部添加一个函数conflict_new_branch(),并执行提交。而后在master分支中对hello.txt进行修改,在首部添加conflict_master()函数

此时我们返回new_branch分支,如果我们此时需要将两个分支进行合并,则自动合并失败,会出现冲突

此时git会让我们自己选择要保留的内容,分割线上面是当前HEAD指针指向的分支所包含的内容,下面是master分支包含的内容

编辑过后我们进行提交等操作

同时我们也可以将内容提交到远程库上,此时远程库也会出现对应的新分支,下图也说明了merge操作的概念图

  

 

场景4 Git Rebase

Git Rebase可以使得两个依赖于同一个祖先的分支实现纯线性变化,我们用两个图来说明

首先在merge操作中,每一个新分支上的结点提交记录仍然是独立的,在最后进行merge时,会产生一个新的文件作为操作的结果

但是如果是使用rebase操作,我们在new_branch上面的操作都会作为一个patch操作使得每个操作都是master上面的直接依赖,这样我们版本的变化就是完全线性的

首先在初始状态我们在new_branch上对hello.txt进行多次修改和提交

而后我们切换到master分支,使其向前前进一步(添加一个新函数)

此时new_branch依赖的master上的版本已经发生改变,我们切换到new_branch上使用rebase操作

这样我们在master上就具有了和new_branch分支一样的hello.txt(都具有了fun_2)

 

场景5 Fork与Pull Request

此场景主要针对于跨团队进行开发的情况,我首先申请一个新的github账户DingZerui2

在此账户下我们使用fork工具将另一个库fork到我们的远程库,后执行clone操作并对我们的本地库进行修改,修改好后点击提交

我们而后对原仓库拥有者提出申请

此时切换账号到原仓库,我们可以点击merge使得两个分支进行合并

 

小结

这次对git的尝试是我第一次使用git,孟宁老师的文章中提到的任务也基本完成。我在学习的过程中也发现git的确是很适用的版本控制工具,而我对它的理解还非常粗浅,在以后的学习中应该多多使用,加深对主要指令的理解和git机制的理解。

posted @ 2020-10-07 20:19  特斯拉2016  阅读(155)  评论(0编辑  收藏  举报