git的使用心得
本文参考于孟宁老师的文章:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg。
1.浅谈Git
Git是由Linus花了两周时间自己用C写了一个分布式版本控制系统,一经推出就迅速成为了目前世界上最先进的分布式版本控制系统。它不但能自动帮我们记录每次文件的改动,还可以让同事协作编辑,这样我们就不需要自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,也只需要在软件里看一眼就可以。
2.准备工作
我是通过vscode附带安装了Git,并且做好了创建版本库等一系列工作。然后在GitHub上注册了一个账号。我是使用vscode以及命令行完成本次作业的。
3.Git的常用指令
git init # 初始化一个本地版本库
git status # 查看当前工作区(workspace)的状态
git add [FILES] # 把文件添加到暂存区(Index)
git commit -m "wrote a commit log infro” # 把暂存区里的文件提交到仓库
git log # 查看当前HEAD之前的提交记录,便于回到过去
git reset —hard HEAD^^/HEAD~100/commit-id/commit-id的头几个字符 # 回退
git reflog # 可以查看当前HEAD之后的提交记录,便于回到未来
git reset —hard commit-id/commit-id的头几个字符 # 回退
git clone命令官方的解释是“Clone a repository into a new directory”,即克隆一个存储库到一个新的目录下。
git fetch命令官方的解释是“Download objects and refs from another repository”,即下载一个远程存储库数据对象等信息到本地存储库。
git push命令官方的解释是“Update remote refs along with associated objects”,即将本地存储库的相关数据对象更新到远程存储库。
git merge命令官方的解释是“Join two or more development histories together”,即合并两个或多个开发历史记录。
git pull命令官方的解释是“Fetch from and integrate with another repository or a local branch”,即从其他存储库或分支抓取并合并到当前存储库的当前分支。
4.场景演练
4.1场景一:Git 本地版本库的基本用法
在本地中新建一个文件夹,创建一个.txt文件,然后用vscode打开,编辑。将其添加到暂存区,然后点击提交。
4.2场景二:Git 远程版本库的基本用法
在vscode中将本地库的内容上传到远程库,地址是https://github.com/ustc2020/learngit.git
同样我们可以将提交到远程库的版本拉取回本地。选择:拉取,推送-拉取自,然后输入地址就可以了。
4.3场景三:团队项目中的分叉合并
使用vscode创建分支,如果想把当前工作区切换到master分支,在VS Code中可以使用如下图【签出到...】菜单,然后选择要签出的master分支即可完成分支切换。
分支的合并与删除:通过命令行的方式将修改过的文件提交到branch分支之中,然后再切换回master时会发现刚刚修改过的内容不见了。因为那个提交是在branch分支上,而master
分支此刻的提交点并没有变。我们可以通过git merge branch2语句将刚刚在branch2提交的内容合并到master上。合并后,再查看study2.txt的内容就可以看到,和branch2分支最新提交的是完全一样的。之后我们便可以通过git branch -d branch2语句来删除branch2分支了。
4.4 场景四:Git Rebase
在软件开发流程中,开发者的提交要尽量干净、简单。开发者要把自己的代码修改按照功能拆分成一个个相对独立的提交,一个提交对应一个功能点,而且要在对应的 commit log message 里面描述清楚。因此在合并和 push 之前检查修改一下 commit 记录时常需要。而rebase操作可以把本地未push的分叉提交历史整理成直线,目的是使得我们在查看历史提交的变化时更容易。
git rebase命令格式大致如下:
git rebase -i [startpoint] [endpoint]
#其中-i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支的HEAD。
#一般只指定[startpoint] ,即指定从某一个commit节点开始,可以使用HEAD^^、HEAD~100、commit ID或者commit ID的头几个字符来指定一个commit节点
#比如下面的代码指定重新整理HEAD之前的三个commit节点。
git rebase -i HEAD^^^
git rebase —abort
git rebase --continue
5总结
选修上高级软件工程之后,通过本节课的学习,我了解了如何初始化本地库,进行本地库的基本操作;如何创建远程库,远程库和本地库是如何交互的。掌握了版本控制工具在几大场景下的使用方法,以及在VSCode中进行源代码管理的各种操作。感谢孟宁老师的指导!