git使用心得
参考文献:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg
https://www.cnblogs.com/matengfei123/p/8252128.html
https://blog.csdn.net/nrsc272420199/article/details/85555911
Git 的基本操作
Git 的基本操作大致如下图。
场景一:Git 本地版本库的基本用法
场景一主要是在本地对源代码进行基本的版本控制,主要通过git add和git commit -m提交版本,有了提交记录之后可以灵活地将当前工作区里的源代码回退到过去的某个版本,也就是回到过去。回到过去之后,也有可能发现之前撤销的某个版本是有价值的,希望找回来,这就需要回到未来。过去和未来之间的分界点就是HEAD,即当前工作区所依赖的版本。
1,初始化一个本地版本库
首先在VSCode中使用快捷键 Ctrl+`(ESC键下方的按键)调出终端,输入:git init ,即可初始化一个本地版本库。
2,克隆GitHub版本库
从GitHub上将版本库克隆到本地完成本地版本库的初始化,对应的命令如下:
3,查看版本库workspace 状态
在项目目录下执行git status命令即可查看Git本地版本库当前 workspace 的状态。
4,暂存更改的文件
1,git add FILES,是将更改的文件加入到【暂存的更改】列表里。
2,现在通过git add file_name将对应的文件加入到【暂存的更改】列表里
3,如下图所示:git reset HEAD FILES,是将暂存更改的文件从【暂存的更改】列表里取消,重新回到【更改】列表里。
4,git checkout -- FILES / git checkout .,是将该文件中的更改清除掉。
5,把暂存区里的文件提交到仓库
1,git commit -m "file_01 test01"
如上命令可以把暂存区里的文件提交到仓库
。(双引号内的内容是对本次提交的描述)
2,git log
如上命令可以查看提交日志,可以看到当前 HEAD 之前的所有提交记录。
3,查看之前的版本
git reset —hard HEAD^
git reset —hard HEAD^^
git reset —hard HEAD~100
git reset —hard 128个字符的commit-id
git reset —hard 简写为commit-id的头几个字符
如上命令可以让HEAD回退到任意一个版本,比如HEAD^表示HEAD的前一个版本、HEAD^^表示HEAD的前两个版本、HEAD~100表示HEAD的前100个版本,也可以用版本号字符串来指定任意一个版本。例如回到上一个版本,如下图所示:
git reflog 命令可以查看当前 HEAD 之后(时间更晚)的 提交记录,从而可以通过git reset —hard回到未来。
场景二:Git 远程版本库的基本用法
1,管理本地版本库跟踪的远程存储库的命令为git remote。直接输入git remote可以看到git clone之后默认的远程存储库名称为orgin。使用git remote -v 可以查看更详细的远程存储库信息,包括fetch(抓取)的远程存储库URL和push(推送)的远程存储库URL。
2,在我们假定的使用场景中,在命令环境下同步操作大致相当于如下两条命令:
git pull:拉,即从github上获取版本库
git push:推,即将本地版本库更新到github上
通过上述两条命令,成功将本地的更新(在本地新建了一个file_01文件)同步到github上。
场景三:团队项目中的分叉合并
1,何为分支
假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。
2,分支的创建与合并
1,首先,通过git branch 命令来查看当前的分支,如下图所示,其中带 * 的为主分支。
2,现在我们来进行分支的创建,此处由于我已经创建了一个名为mybranch的分支,故先执行 git branch -d mybranch 命令来删除分支,
然后在通过命令git checkout -b mybranch 来新建名为mybranch的分支。
git checkout
命令加上-b
参数表示创建并切换,相当于以下两条命令:
git branch mybranch
git checkout mybranch
3,接下来我们需要在mybranch上进行开发工作,然后进行 add / commit 操作,此时的操作都是在mybranch分支上进行的,与main分支无关。
下图是mybranch分支上的log
接下来我们再看下此时main分支上的log,如下图所示:
4,最后,先切换回main分支,将远程origin/main同步最新到本地存储库,再合并mybranch到main分支,推送到远程origin/main之后即完成了一项开发工作。
此时我们可以登录到github上查看刚同步上去的版本库。提交说明为最新的:commit log : test branch
5,详谈两种 merge 命令。
1,git merge mybranch
即"快进式合并"(fast-farward merge)。合并前后大致如下示意图,也就是mybranch分支与master分支会合并到一条时间线中。
2,git merge --no-ff mybranch
如果要保留mybranch分支为一段独立的分支线段,则需要使用--no-ff参数关闭"快进式合并"(fast-farward merge),使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。合并后大致如下示意图。
场景四:Git Rebase
场景四实际就是在场景三团队项目工作流程中增加一步Git Rebase,即在mybranch分支上完成自己的工作之后,为了让 log 记录将来更容易回顾参考,用 git rebase 重新整理一下提交记录。注意不要通过rebase对任何已经提交到远程仓库中的commit进行修改。
1,为什么用 rebase 命令
通过git rebase -i 将本地的多次提交合并为一个,以简化提交历史。本地有多个提交时,如果不进行这一步,在git rebase master时会多次解决冲突(最坏情况下,每一个提交都会相应解决一个冲突)
2,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^^^
运行上述命令后会打开命令行文本编辑器大致如下:
接下来我们删除版本B,然后保存退出。这时用VS Code打开冲突文件大致如下:
可以根据提示选择保留哪个更改,也可以直接编辑文件去掉提示信息。解决冲突后需要将修改后的文件存入暂存区(git add),最后执行git rebase --continue命令完成git rebase。这时查看提交日志可以发现B版本已经不存在了。
最后,和场景三的第4步一样,先切换回master分支,将远程origin/master同步最新到本地存储库,再合并mybranch到master分支,推送到远程origin/master之后即完成了一项开发工作。
心得体会:
在此之前是一个git小白,仅仅听说过,之前也查找一些资料去学习,但由于种种原因,最终都半途而废。感谢这次老师的详细教程,让我能够系统的学习了git的使用,在学习过程中碰到了很多的问题,大部分都在老师的教程里找到了解决方法,少部分问题也通过查找资料得到解决。通过本次学习,我收获颇多,基本掌握了git的常用命令,系统的学习了版本控制,补全了这方面的空白,并且在学习过程中,提高了自己的动手能力,自学能力,对以后的学习开发意义重大。