Git使用心得
在此之前,首先安装Git。
安装Git后,在首次使用时需要设置自己的用户名以及邮箱地址。后续的每次Git提交都会使用这两个信息。
与此同时,使用了--global后,则该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global
选项的命令来配置。
场景一:Git本地版本库使用
首先需要先初始化一个版本库,通过VScode可以直接初始化一个本地Git版本库,实际生成一个.git的隐藏文件夹。
也可以通过git clone命令从远程仓库拷贝到本地来完成本地版本库初始化。
git clone URL //从远程仓库拷贝项目
在VSCode中,如果完成了项目或文件的更改操作,可以将其添加到“暂存更改”中。
点击图中的 “+” ,即完成文件的暂存更改操作,此时该文件无法再被修改。
如果需要重新对该文件进行修改,点击 “-“ 即可将该文件退回到更改项中,此时可对该文件重新进行修改。
需要注意的是:我们只能提交暂存更改下的文件。如下图所示:
项目本地仓库提交时,需要输入日志信息:
提交后在项目的时间线一栏可查看提交记录以及本次提交所修改的内容。
与此同时,如果我们需要撤销上一次提交,可通过以下操作完成:
注意:尽管我们可以撤销上一次提交,但依然会在仓库留下记录,可以通过git reflog命令进行查看:
本地版本库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远程版本库使用
如果在github或者gitee上有自己的仓库,可以将其远程克隆到本地。具体操作如下:
当然也可以通过命令的方式进行克隆:
克隆到本地仓库后,其它操作可以按照场景一进行。其中,一些常用命令的使用介绍如下:
-
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”,即从其他存储库或分支抓取并合并到当前存储库的当前分支。
然而,实际开发中使用git的情况是错综复杂的。我们假定以下场景:
git 的使用中,通常是两种情况:1、在本地提交代码到仓库中 2、更新远程仓库。我们假定这两种操作不会同时进行,且每次进行代码修改时先进行同步操作(即先push,然后pull)。
在VSCode中的操作如下: ( 此同步操作会将提交项(commits)推送(push)到远程仓库origin/master,并从远程仓库origin/master拉取(pull)提交项到本地master。)
而在实际的项目工作中,难免会有冲突,从而导致无法同步。此时我们需要先在本地解决冲突:
首先我们先将远程仓库的提交项pull到本地项目,并合并到当前分支。 在VSCode中操作如下:
此过程中可能会出现冲突,导致无法完成merge。(此过程冲突是由于本地的代码版本和pull下来的代码版本不一致,git无法得知你所需要的代码版本,所以需要对冲突的代码进行手动处理)
冲突处理完毕后,只需要将新的代码push到远程仓库中,即可完成本地与远程仓库的同步。该操作用git push命令完成,对应VSCode操作如下:
场景三:团队项目中的分叉合并
以上只是描述了单人项目中的同步问题,而在实际多人开发项目中,避免不了多人同时向远程分支提交、拉取代码,从而造成诸多冲突。其次在提交记录上,多个开发者,多项提交记录在同一时间线上错综复杂,对后续代码查看和回退造成了很大困难。
为了解决以上问题,我们采用分支—合并的思想,具体做法如下:
-
克隆或同步最新的代码到本地存储库;
-
为自己的工作创建一个分支,该分支应该只负责单一功能模块或代码模块的版本控制;
-
在该分支上完成某单一功能模块或代码模块的开发工作;
-
最后,将该分支合并到主分支。
首先先创建分支,在VSCode操作如下:
使用git命令:该命令转换到mybranch分支,若没有该分支,则先创建。(也即切换工作区)
git checkout -b mybranch
在VSCode中,切换分支操作如下:(签出到+选择需要签出到的分支)
如果要将mybranch分支合并到master中,首先确保当前分支在mybranch中,然后合并到master,VSCode操作如下:
使用命令方式如下:(当前分支还未创建内容)
场景四:Git Rebase
实际项目开发中,我们每提交一次代码,都要记录一次日志来描述此次增加及修改的内容。而随着项目进行,提交记录会逐渐累积,如果不及时进行整理,就会出现如下情况
所导致的问题:
1.不利于代码 review
设想一下,你要做 code review
,结果一个很小的功能,提交了 60
多次,会不会有一些崩溃?
2.会造成分支污染
你的项目充满了无用的 commit
纪录,如果有一天线上出现了紧急问题,你需要回滚代码,却发现海量的 commit
需要一条条来看。
遵循项目规范才能提高团队协作效率,而不是随心所欲
为此,我们可以使用git rebase命令。其命令格式如下:gitrebase-i[startpoint][endpoint]
先输入 git rebase -i HEAD~1,会打开文本编辑器如下所示:
对该文件进行修改或者删除操作后,肯能导致VSCode中出现冲突,此时我们可以手动解决冲突,完成后执行git rebase --continue 完成git rebase的操作。
rebase退出操作如下:
参考文献 https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg