Git使用心得体会
参考文献:https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg
1、序言
学了孟宁老师的《高级软件工程》,让我这个跨考小白获益匪浅,孟老师由浅入深地给我们介绍了编程中常用的编辑软件VScode和Git版本控制。孟宁老师讲的非常细致,并且提供了很多有用的课外资料,让我觉得此次选课值了。
2、版本控制和Git简介
我们在写一个文档的过程中,经常会另存为一个独立文件作为备份,来管理我们在写文档的过程中产生的不同版本,这就是版本管理,只是这是用人工的方式来做版本控制。
版本控制的策略比较常见的有两种:一种是独立文件或说整体备份的方式,比如使用另存为将整个项目或者整个文档整体备份一个版本;另一种就是补丁包的方式,比如使用 diff 命令将当前版本与上一个版本对比得出两者之间的差异从而形成一个补丁包,这样上一个版本加上这个补丁包就是当前版本
版本控制系统大致分为两大类,一类是中心版本控制系统,比如 Concurrent Versions System(简称 CVS)和 Subversion(简称 SVN);另一类就是分布式版本控制系统,比如Git,同时Git是目前世界上最先进的分布式版本控制系统(没有之一)。
3、Git 的基本操作和基本概念

远程库(Remote Repository):在服务器上存储代码的仓库。可以把本地仓库存储到GitHub上的远程仓库。
工作区(Workspace):本地Repo中的某个branch被checkout到当前workspace,就能在当前源代码目录中看到一份完整的源代码,这份完整的源代码就是workspace
暂存区(Stage or Index):add和commit两步操作中间Index索引数据
版本库(Repository):本地 Repo都存在项目根目录下.git文件夹中,内部可能有多个 branch,但至少有一个叫 master的branch
Git的基本操作是如上图的,对于本地 Repo如上图中间存储库Repository,实际上本地 Repo都存在项目根目录下.git文件夹中,内部可能有多个 branch,但至少有一个叫 master的branch。
本地Repo中的某个branch被checkout到当前workspace,就能在当前源代码目录中看到一份完整的源代码,这份完整的源代码就是workspace。
在workspace中新增文件或修改文件,只有完成add和commit两步操作才能将新增或修改的文件纳入本地Repo的存储库中进行版本管理。add和commit两步操作中间Index索引数据应该也是和本地 Repo一样存在项目根目录下.git目录中。
Git的分布式在于本地 Repo 中的 branch 与一个或多个远程 Repo(上图中的Remote) 中的 branch 存在跟踪关系,这样就构成了Git分布式版本控制的网状结构。
4、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”,即从其他存储库或分支抓取并合并到当前存储库的当前分支。
5、场景演练
5.1场景一:Git本地库的基本用法
5.1.1 新建和初始化本地版本库
先下载好VScode,老师说VScode会自带Git,但是我实操时确实是没有自带Git的,但是VScode会关联网站让我们去下载Git。安装好VScode和Git之后,如下:

单击右键,然后点Git Bash Here便可进入Git的命令行操作了

初次使用VScode,快捷键Ctrl+Shift+G进入源代码管理,或直接点击
进入源代码管理当然也可以在命令行输入git init创建本地库。
最初是这样的

打开文件夹或者克隆存储库之后便变成了下图

点击初始化之后出现下图(repository是我自己在d盘新建的文件夹并且打开了,然后要查看隐藏的项目才可以,hello.txt是我自建的)

命令行方式如下:

5.1.2添加到暂存区
我先在本地库.git所在的文件夹repository里新建一个hello.txt文本,此时VScode显示如下图

上图中源代码管理中以绿色U标记的文件为没有添加到版本库进行跟踪的文件(Untracked files)、以橙色M标记的文件为已修改(Modified)未提交的文件(Changes not staged for commit)。点击文件后面+号或者使用命令行 git add 可以将更改暂存,暂存更改可以通过点击减号清除更改。
操作如下图

命令行方式如下:

5.1.3把暂存区的文件提交到本地repo
只要在-暂存的更改-列表里的文件的上方击对号“√”(Ctrl+Enter)或命令行:git commit -m "附带信息"将暂存的文件提交到仓库中,只是在提交之前会强制要求输入提交日志消息。
结果出现以下问题

在d盘repository文件夹中的hello.txt上单击右键后点击Git Bash Here(记住一定要在该文件上右键)

输入后如下

最后提交成功后如下图

命令行方式如下:

5.2、场景二:Git远程版本库
在github上注册账号并添加新的仓库(注册时要注意使用相应的浏览器,国内某些浏览器注册github并不会成功)

创建成功后如下

将本地库的内容上传到远程库
可以直接如此
git remote add origin https://github.com/xctang-bot/remote-repository.git
然后git push origin master
也可以先点击查看-命令面板,输入add remote

借此把远程存储库添加进去,其地址为https://github.com/xctang-bot/remote-repository.git

添加成功后便可以开始推送

此时出现这个界面,填入相应信息即可

成功推送后结果如下

命令行方式如下:

5.3 场景三:团队项目中的分叉合并
使用git branch命令可以创建一个新分支

在新分支中提交hello.txt并且将两个分支进行合并

融合图像图如下

合并冲突处理:
在实际情况下,我们创建mybranch分支后,master分支可能会被团队成员更新,那么在我们将要进行分支合并时,就有可能因为都修改了同一位置而导致分支合并失败
假设有团队成员在master分支下对hello1.txt进行了修改并提交

此时我们完成了自己的分支工作,同样地对hello1.txt进行了修改并提交到本地仓库

我们再回到master分支下打算将两个分支合并时,因为同时修改了相同的位置则会导致分支的合并冲突而失败

最后沟通以决定保留哪一个分支的修改内容
5.4 场景四:Git Rebase
git rebase命令格式如下: git rebase -i [startpoint] [endpoint]
在团队项目工作流程中增加一步Git Rebase,即在mybranch分支上完成自己的工作之后,为了让 log 记录将来更容易回顾参考,用 git rebase 重新整理一下提交记录,注意不要通过rebase对任何已经提交到远程仓库中的commit进行修改。
查看提交日志

输入git rebase -i HEAD^^^

可在该文本编辑器中对commit记录进行修改,可以试着删除pick 855065f second这一行

修改后可能会冲突,冲突的解决方式与上文相同,解决冲突后提交即可
最后,执行git rebase --continue指令即可完成rebase过程

浙公网安备 33010602011771号