Git使用心得
一、Git简介
Git可以方便地进行版本控制,比如我们写一个文档的过程中,经常会另存为一个独立文件作为备份,来管理我们在写文档的过程中产生的不同版本,这就是简单的人工版本管理。
Git有两种版本控制策略:一种是独立文件或说整体备份的方式,比如使用另存为将整个项目或者整个文档整体备份一个版本;另一种就是补丁包的方式,比如使用 diff 命令将当前版本与上一个版本对比得出两者之间的差异从而形成一个补丁包,这样上一个版本加上这个补丁包就是当前版本。
Git是目前世界上最先进的分布式版本控制系统。
二、Git版本控制大致操作
Git基本操作大致如下图:
其中,上图中的repository表示本地仓库,他是存储在根项目文件夹.git中。内部可能会有多个分支,但至少会有一个名为master的分支,也就是主分支,使用checkout操作迁入和迁出分支,我们下面再做具体介绍。
打开其中一个分支,我们就能在workspace(工作区)中看到这个分支下的一份完整的源代码。当我们选择对源代码进行修改时,文件状态就会改变,比如如下图中源代码管理中以绿色U标记的文件为没有添加到版本库进行跟踪的文件(Untracked files)、以橙色M标记的文件为已修改(Modified)未提交的文件(Changes not staged for commit)。
其中,从状态绿色U到橙色M状态的转变(也就是“暂存更改”),我们需要使用在【更改】列表里的文件上点击加号“+”即可,或者使用如下命令:
git add .
git add FILENAME
这两个操作将会使文件存入暂存区Index,点击撤销符号即可放弃更改(git checkout -- FILES / git checkout .),是将该文件中的更改清除掉。
只要在【暂存的更改】列表里的文件上点击减号“-”即可取消暂存更改(git reset HEAD FILES),是将暂存更改的文件从【暂存的更改】列表里取消,重新回到【更改】列表里。
接下来使用git commit -m "提交日志"命令可以将【暂存区】的文件存储到【本地Repo】中。
以上是关于Git本地版本控制,Git远程版本控制我们将使用本地仓库和远程仓库(remote)的交互,其中,远程仓库会跟踪本地仓库的分支。本地与远程Repo之间数据同步操作有clone、fetch、push、pull等。
三、Git本地基本操作
接下来看一下git本地的常规操作
3.1打开文件夹
首先打开VSCode,选择一个【打开文件夹】,选择一个文件夹
点击【查看】->【终端】,将终端控制台显示出来,这里我们就可以进行git命令的操作了
3.2初始化git仓库
3.2.1 git init命令
Git 使用 git init 命令来初始化一个 Git 仓库,在执行完该命令后,会自动生成一个.git目录,该目录目前是一个空的Git存储目录。
3.2.2 git status命令
我们可以使用git status命令来查看当前git仓库的状态
3.3修改与提交
我选择了test文件夹,在test文件夹旁边会有一个小按钮新建文件,点击,新建文件
3.3.1git add命令
git add命令可以将修改后的文件提交到暂存区保存
添加指定文件到暂存区:
git add FILENAME
添加所有修改文件到暂存区:
git add .
为了方便操作,我们先修改一下readme.txt,使用git add指令把他添加到暂存区
3.3.2 git commit指令
git commit指令可以将暂存区中的文件附带上提交日志提交到本地仓库中。
git commit -m "wrote a commit log"
Git要求在提交之前要设置用户名和邮箱地址,可以使用如下两个指令:
git config --global user.name "your name"
git config --global user.email "your email adress"
3.3.3 git log指令
git log指令可以用来查看当前分支的所有提交日志。
3.3.4 git reset、git reflog指令
git reset指令可以进行版本回退,回退到HEAD之前任意一个版本。
git reflog指令可以查找到HEAD版本之后(时间更晚)的提交记录。
HEAD说明:
HEAD表示当前版本
HEAD^表示HEAD前一个版本
HEAD^^表示HEAD前两个版本
……以此类推
另外,也可以用数字来表示:
HEAD~100表示前100个版本
于是,我们可以使用git reset指令如下
git reset --hard HEAD^^
git reset --hard HEAD~3
git reset --hard commit id
上面几个指令分别表回退到HEAD的前两个版本、回退到HEAD的前3个版本,也可制定版本号来表示回退的版本。
在版本回退了之后,我们怎么查看之前的版本呢?可以使用git reflog指令查看未来的提交版本号,再使用git reset --hard commit id 来回到未来。
3.3.5git分支迁入迁出
git branch指令用来显示当前仓库所有分支。
git checkout -b指令用来迁入迁出分支,如果指定分支不存在,将创建一个新的分支。
git merge用来合并分支,如果要将dev分支合并到master分支中,需要进行以下几步
1) 将分支转换为master分支
2)再master分支中执行指令git merge dev
3)如果有冲突,将解决冲突
这种方法会将dev分支中的时间点合并到master分支中,形成一条时间线,称为“快进式合并”。如要保留dev分支中的时间点,我们可以关闭快进式合并,命令如下:
git merge --no-ff dev
四、Git远程操作
4.1初始化远程仓库
再gitee上创建自己的远程仓库
使用克隆命令将远程仓库克隆到本地进行修改,格式如下
git clone [url]
4.2 git pull 和 git push指令
git pull拉取远程仓库里的提交项到本地仓库并合并到当前分支,即将origin/master中的提交项fetch到本地仓库并merge到本地master分支。
git push将本地仓库中的提交项推送到远程仓库,即可完成本地仓库和远程仓库的同步。
五、Git rebase的使用
Git Rebase可以在mybranch分支上完成自己的工作之后,为了让 log 记录将来更容易回顾参考, 重新整理提交记录。
命令格式如下:
git rebase -i [startpoint] [endpoint]
其中[startpoint] [endpoint]指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支的HEAD。
将仓库中新建一个dev分支,提交日志为
master分支提交日志为
使用git rebase对A、B节点进行修改
checkout到master分支,合并dev分支
此时master分支的提交日志为
我们就完成了dev向主分支的合并,并修改了两个提交节点。
学习心得
Git是一个非常强大的工具,它有助于团队合作开发项目,是一个必不可少的工具,以后还需要多多熟悉使用。同时在孟宁老师课堂上学习到的内容让我对git的理解更加深入,感谢孟宁老师的指导。
参考文献
https://mp.weixin.qq.com/s/Km5KuXPETvG0wCGHrvj9Vg