Git浅谈
作为一个计算机专业的本科毕业菜鸟,听到Git这个名词,感觉熟悉又陌生。截止现在,最深刻的印象应该是大二的时候,小组开发一个安卓APP,由于分工合作,所以,老师建议我们使用Git来进行代码的管理和备份。但是当时由于操作不当,分支没有明确,很多命令不熟悉,所以导致提交之后版本错乱,大量修改丢失。最后,所有代码都是手工合成的。从那以后,便对Git产生了恐惧和抵制,加上本身也没有进行大型的项目开发,所以使用Git较少。
最近上了孟宁老师的高软课之后,听完老师的讲述,感觉Git这个东西在我们开发中是不可获取的,毕竟马上就可能是要去实习的人了,所以,还是要把本科时候的懒散现在给弥补一下。
本博文为Git的一些列基本操作和分析,基于孟宁老师的文章进行编写:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg ,感谢孟宁老师的指导。
通过Git的几个基本使用场景,可以更加清晰的了解到其工作原理和运行方式。
场景一:Git本地版本库的基本用法。
Git本地版本库是Git对代码进行管理的基础,用于对源代码进行基本的版本控制。
初始化本地版本库时,可以直接在命令行初始化,也可以利用VS Code上的菜单来进行初始化,由于对命令不太熟悉,此处利用命令进行操作。

可以看到,在打开VS Code的时候,之前的文件目录里面已经有.git文件存在,说明之前已经初始化过了,此处将其删除,写入命令:
1 git init #本地新建版本库

此时可以看到.git文件又重建了,即我们再次初始化成功。当然,如果已经在Gitee.com或者Github.com网站上创建了版本库,可以通过git clone命令,将版本库克隆到本地完成本地版本库的初始化。git clone命令如下:
1 git clone https://DOMAIN_NAME/YOUR_NAME/REPO_NAME.git #远程版本克隆到本地
现在,我们可以去看看.git文件里面的内容,

里面的hooks文件夹存放一些shell脚本文件,info文件包含仓库的一些信息,objects文件夹存放所有的git对象。config和description文件保存当前仓库的配置信息和相关描述。HEAD文件即为HEAD指针,指向当前分支。打开HEAD,指向如下:
1 ref: refs/heads/master
可以看出目前指向主干,暂无其它分支。
Git本地版本库初始化完成之后,可以查看其工作状态,利用命令:
1 git status

可以看到还没有将任何文件添加到版本库进行追踪。
下面我们在工作区新建一个hello.txt文件,在里面写一点内容,然后利用git add FileName进行提交。

此时可以发现,提交以更改,即新文件已提交,当然,此处还是提交到暂存区,接下来我们将其提交到仓库,命令如下:
1 git commit -m "wrote a commit log infro" #如上命令可以把暂存区里的文件提交到仓库。git log如上命令可以查看提交日志,可以看到当前 HEAD 之前的所有提交记录

提交之后,用git log命令即可查看之前的所有提交记录。至此,我们就完成了提交到仓库。
接下来,进行文件的修改和版本回退。在此之前我将工作区里面的data.json文件提交到仓库,现在对该文件和hello.txt文件进行内容的修改,然后我们将txt文件提交。

可以看到,json文件和txt文件显示的颜色是不同的,显而易见,是因为我把修改之后的txt文件提交到了暂存区,但是json文件并没有提交,所以才会出现颜色的差异,然后提交状态也会显示。接下来我们将两个文件提交到仓库,如下图所示,查看日志可以看出已经记录了修改。


最后来进行版本回退,主要有以下几条命令:
1 git reset HEAD^ # 回退版本,一个^表示一个版本,可以多个 2 git reset HEAD~5 # 也可以使用这种形式 3 git reset commit-id # 回退到指定版本 4 git reflog # 可以查看当前HEAD之后的提交记录,便于回到未来
首先,回退到上一个版本:

然后我们利用git reflog查看提交记录,可以回到指定的版本。

此时,我们查看文件,已回到之前的版本。
场景二:Git 远程版本库的基本用法
如果您已经在Gitee.com或者Github.com等网站上创建了Git版本库,可以通过git clone命令,将版本库克隆到本地完成本地版本库的初始化。git clone命令的用法如下:
1 git clone https://DOMAIN_NAME/YOUR_NAME/REPO_NAME.git
我们利用之前在github上托管的项目来进行克隆测试。


此时已经将项目克隆到本地。可以看到,使用git remote -v 可以查看更详细的远程存储库信息,包括fetch(抓取)的远程存储库URL和push(推送)的远程存储库URL。
下面我们在本地仓库对文件进行修改,然后添加到暂存区并进行提交,最后利用push命令,可以看到远程版本的文件已进行修改。

在push成功之后,我们继续对远程版本的text.txt文件进行修改,利用pull命令将其拉取到本地,观察本地文件,也已经修改完成。

即在该场景下,做到了远程和本地的版本同步控制,利用push和pull命令协作完成。当然,在VS Code的菜单栏中也可完成这些操作,某种程度上来讲更加快捷,此处不赘述。
场景三:团队项目中的分叉合并
又到了这个令人恐惧的场景,本科的时候就是因为分支命令不清楚,然后提交不规范,导致出现了各种各样的错误。接下来,过一遍完整的流程:
第一步创建分支,命令如下:
1 git checkout -b mybranch
此处创建名为lhz的分支:

在lhz分支之下对text文件进行多次修改和提交。
然后切换到main分支,进行合并和修改。命令如下:
1 git checkout main #分支切换 2 git pull #拉取远程仓库里的提交项到本地仓库并合并到当前分支 3 git merge --no-ff lhz #分支合并 4 git push #将本地仓库中的提交项推送到远程仓库

在此过程中,很容易忘掉pull这一过程,直接结果就是最终报错,无法推送。所以在过程中一定要按照命令顺序来执行。
查看远程文件:

文件已进行修改,和本地仓库文件同步。
此时,查看github的网络图也可以看出:

三次提交和分支结构。估计经过这次训练,以后的合作管理应该会轻松很多,起码不至于最后到手工合成的地步。
场景四:Git Rebase
使用Git Rebase命令,即为在分支上完成自己的工作之后,为了让 log 记录将来更容易回顾参考,用 git rebase 重新整理一下提交记录,这样就可以较为方便的管理分支上的提交记录。
git rebase的相关命令如下:
1 git rebase -i HEAD^^^ #返回HEAD之前的三个节点 2 git rebase --abort #撤销rebase命令 3 git rebase --continue #结语
首先,利用在分支lhz上先进行三次更改和提交,然后利用git rebase -i HEAD^^^命令返回之前的三个节点,即相当于追踪次三次提交记录。
如下第二图中删除第二次提交的结果,即把第二行删除掉,这个时候会出现如下第一图所示的冲突,究其原因是提交的版本之间的冲突造成了错误。


对于删除上图所示的第二句造成的冲突,打开源文件,如下图所示,有明显的的提示信息,但是由于txt文件中两者的功能不会造成冲突,所以,删除提示信息即可。

删除提示信息之后将文件加入暂存区,然后利用git rebase --continue命令完成git rebase的过程。这个时候我们可以看出已经成功执行。

检查日志,发现第二条添加的内容已经删除。

然后再切回到main,进行场景三的拉取和推送等一系列操作,观察文件即可。此时我们可以看到gihub上的提示:
此时即显示为第三次提交。所以,此时也完成了整个git rebase的流程。此处有一个很容易犯了的错误,那就是利用rebase对已经提交到远程仓库的文件进行修改,这样是错误的做法,会导致版本错乱,分支和main的代码产生冲突,所以这也是我们要注意的地方之一。
心得体会:
对于计算机专业的学生来说,如果不能很好的掌握Git的用法,可能就会很丢人。但是由于自己本科的时候的疏忽和懒散,直接导致了现在对Git使用的极其不熟练。经过此次的简短的练习,让我对Git的基本用法产生了更深刻的了解,但是这些也还是远远不够的。真正需要练习的,还是在日常的做项目做实验中加以应用,只有付诸实践才能真正的掌握这些基础的知识和Git深层次的原理。
革命尚未成功,同志仍需努力!!

浙公网安备 33010602011771号