Git使用心得体会
很早之前就听说过Git这个工具,本科阶段做的东西大多都是单人完成的,一直没有使用过Git,通过孟宁老师的课学习了Git的使用和原理,感觉受益匪浅,以下是Git使用的一些心得体会。
参考文献:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg
一、Git的安装
VS Code下载地址:https://code.visualstudio.com/ 最新版VSCode实测是不包含Git的,需要单独安装Git
Git下载地址:https://git-scm.com/downloads
二、Git的五大使用场景
场景一:Git 本地版本库的基本用法
打开VS Code ,点击图标 或者使用快捷键Ctrl+Shift+G进入源代码管理如下图
1.git init — 初始化存储库
初次使用需要初始化存储库,可点击初始化存储库按钮或者使用Git命令 git init,来初始化存储库
2.git status — 查看Git本地版本库当前 workspace 的状态。
3.git add — 用于将更改的文件暂存
首先新建一个README.md文件,如下图所示
进入源代码管理,可以看到有一项README.md文件的更改记录,如下图所示
点击该项后方的加号或者执行git add命令,即可将该更改暂存,如下图所示
4.git commit — 把暂存区里的文件提交到仓库
执行git commit -m “message”,message通常写本次提交的内容,会记录到日志文件中,第一次使用提示需要配置user.email和user.name
使用git config --global user.email和git config --global user.name配置user.email和user.name,之后重新执行git commit -m命令
可以看到暂存的更改已经被提交到仓库
5.git log — 查看当前HEAD之前的提交记录
执行git log 命令可以看到控制台打印出了之前README.md的提交记录
6.git reset — 命令用于回退版本,可以指定退回某一次提交的版本。
git reset 有三个参数
①--mixed 默认参数,用于重置暂存区的文件到上一次commit,工作区保持不变。如下图所示暂存test2.md更改然后执行git reset --mixed,暂存操作被撤销。
②--soft 用于回退到某个版本
当前工作区状态如下:暂存区暂存了test2.md,上一次commit提交了test.md更改,此时执行git reset --soft HEAD^命令,可以看到暂存区的记录没有变化,并且将上一次commit提交的test.md撤回到了暂存区。
③--hard 撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交
通过git log可以看到上一次commit提交了test.md文件的修改,此时暂存区暂存了test2.md的修改,如下图所示
执行git reset --hard HEAD^命令
可以看到暂存区内容和上次提交的内容都被撤销删除,而且日志里的提交记录也被清除
7.git reflog — 查看当前HEAD之后的提交记录,便于回到未来
场景二:Git 远程版本库的基本用法
1.git clone — 将Github或者Gitee上的版本库克隆到本地以完成本地版本库的初始化
2.git remote — 列出已存在的远程仓库
git remote -v可以显示详细信息
使用git clone之后默认添加了名称为origin的远程仓库,也可以使用git remote add命令进行添加
3.git pull — 从其他存储库抓取并合并到当前存储库中
为了测试这个命令,我首先登录Github,并新建了testpull.md文件,此时远程仓库和本地仓库的内容存在差异,如图所示
执行git pull命令
远程存储库中的testpull.md被抓取合并到当前存储库中,如下图所示(git fetch和git merge两条命令组合使用可以达到相同效果)
3.git push — 将本地存储库的数据对象更新到远程存储库
为测试git push命令,先在本地存储库删除testpull.md并提交,此时远程存储库比本地存储库多了一个testpull.md文件。
执行git push命令
远程存储库的文件也被删除
场景三:团队项目中的分叉合并
实际项目中往往是多人团队开发项目,多人团队的工作时间线常常是并行的,团队中的每个人都向远程版本库 push,难免会发生分叉现象,该场景使用Git解决项目开发过程中的分叉现象。
1.同步最新代码到本地存储库
2.创建一个分支
git checkout -b mybranch 命令可以创建并切换到新的分支;或者可以使用git branch mybranch命令创建一个分支,再使用git checkout mybranch切换到新的分支。
使用git branch命令可以查看当前分支情况,如图所示当前有main和mybranch两个分支并且此时位于mybranch分支上。
3.在该分支上完成某一单一模块
创建一个testbranch文件,并将其暂存、提交,如图所示。
4.合并分支并推送到远程存储库
使用git checkou main命令切换回main分支
使用git pull命令同步最新存储库到本地
使用git merge命令合并分支
git merger命令默认合并方式是“快进式合并”(fast-farward merge),这样合并分支和主分支会合并到一条时间线中,如下图所示。为了保证版本演进路径的清晰我们往往想要得到如图--no--ff所示的分支结构,这时可以使用git merger --no-ff命令进行合并。
使用git merge --no-ff mybranch合并分支
使用git push命令推送到远程存储库,登录Github查看远程存储库中新增了testbranch文件,如下图所示
场景四:Git Rebase
在git中每一次提交要在commit log message中描述清楚,但在开发过程中,中间有些提交可能是有错误的,后期又进行了更改,因此为了让log记录在以后更容易回顾参考,在push之前需要整理一下commit记录,使用git rebase命令便可以完成这个工作。
为了测试,我首先提交了ABC三个版本
使用git rebase -i HEAD~3命令,表示弹出交互式界面让用户编辑,HEAD~3表示HEAD之前的三个commit节点。
执行命令后弹出编辑界面如下
此时删除B版本(先按 i 切换到插入模式,删除 pick e1f3ffd B 这一行,然后输入:wq保存退出),如果想撤销git rebase操作,可以执行git rebase --abort。
保存编辑。由于前面提交的ABC三个版本都修改了testRebase文件,所以产生冲突,如下图所示,可以根据提示选择保留哪个更改。
解决冲突后需要将修改后的文件存入暂存区(git add),然后执行git rebase --contiune
再次使用git log查看提交日志,可以发现B版本已经不存在了。
最后,像场景三一样合并分支,然后推送到远程仓库即可,如下图所示。