一、常用命令详解
merge【合并】
#从某分支合并到当前分支【推荐使用小乌龟git,图形化界面操作更方便~】
git merge 需要合并到当前分支的名称
作用:合并其他分支的代码到当前分支。
merge命令主要是用来实现从一个分支合并到当前分支的功能,假如平时我们在dev分支开发业务功能,等到上线的时候就需要合并到master分支进行上线,那么我们需要以下步骤:
- 1、本地分支切换到dev分支,并拉取代码,保证代码为最新版本
- 2、本地分支切换到master分支,同样保证代码为最新版本
- 3、选择merge分支为dev分支
- 4、merge完成后,解决冲突
- 5、冲突解决后,把本地的master分支push到远端,merge流程完成
需要注意的是,merge有两种类型的合并:
- fast-forward:当本地分支相对于合并分支没有新的提交时,默认采用这种形式
- no-fast-forward:当本地分支相对于合并分支有新提交时,采用这种
图示:
Rebase【变基】
#从某分支变基更新的代码到当前分支【推荐使用小乌龟git,图形化界面操作更方便~】
git rebase 需要变基到当前分支的名称
作用:把新代码和本地代码进行合并,解决冲突。
变基操作主要应用在我们本地代码需要获取其他分支或者当前分支的最新代码时会用到,rebase是一个线性操作,不去校验冲突,对于已存在的文件总是会选择最新的版本,一般本地操作分为以下几个步骤:
- 1、从远端fetch到最新的代码到本地
- 2、对当前分支进行rebase,把本地分支的代码更新为最新的
PS:若从不同分支直接rebase过来时,类似于merge操作,但是一般来说,merge需要经过冲突文件的解决,而rebase对于同一个文件,总是会选择最新的版本。
图示:
还有一种变基方式为交互式变基,如果有不想提交的代码本地commit了的时候,可以对此次commit进行修改,常用到的命令有以下几种:
- reword:修改提交信息
- edit:修改此提交
- squash:将提交融合到前一个提交中
- fixup:将提交融合到前一个提交中,不保留该提交的日志消息
- exec:在每个提交上运行我们想要 rebase 的命令
- drop:移除该提交
图示:
Reset【重置】
作用:恢复分支代码到一个特定的版本。
重置命令一般使用在进行了一个不想要的提交,那么除了交互式变基我们还可以使用这种方式去快乐的玩耍~,重置也分两种,软重置和硬重置:
#软重置 git reset --sorrt 需要恢复到的commit版本 #硬重置 git reset --hard 需要恢复到的commit版本
概念理解一下:
- 软重置:一般发生在我们想回到原来的提交进行审查,但是又想保留之后提交的文件时,会采用这种方式。
- 硬重置:一般发生在我们想回到原来的提交,而后面的提交不想要了,就用这种方式。
图示:
Revert【还原】
作用:还原代码。
这个命令就好理解了,比如我们本地改了一堆东西,发现改错了,直接revert就可以了~
又或者有这种场景,在某个分支上提交了一个文件,但是后面我们又不想要这个文件了,可以revert这次commit【只还原当次commit,同时会增加一个还原操作的新commit】
下图演示了这么一个场景:假设 ec5be 添加了一个 index.js 文件。但之后我们发现其实我们再也不需要由这个提交引入的修改了,就可以还原一波,并且增加了一个还原操作的新commit:9e78i。
Cherry-pick【拣选/选樱桃~】
作用:拣选需要的commit到当前分支
这个操作的名称翻译过来有点意思,选樱桃~,字面理解就是选取精华的东西,那在项目中实际上应用的场景是:
- 1、dev分支对于master分支多出了一个commit1,和commit2
- 2、master分支只想要dev分支的commit2而已,不想整个dev分支合并过来
- 3、那我们可以使用这个命令来选择单个commit复制到master分支上
图示:
图中演示了master分支把带有index.js文件的commit(76d12)拣选到master分支上的过程。
Fetch【取回】
作用:取回当前分支最新的代码,不对本地分支进行数据修改,只是下载新的代码
fetch操作主要是用于获取远程最新资源的命令,仅仅是下载新的数据而已,而不对本地代码做操作。
图示:
Pull【拉取】
作用:拉取远端最新的代码到本地,并且合并,同时需要解决冲突【相当于Pull = Fecth + rebase】
图示:
Reflog【查看操作记录】
git reflog 可以展示已经执行过的所有动作的日志。包括合并、重置、还原,基本上包含你对你的分支所做的任何修改。
图示:
有了操作记录以后,我们可以针对某个操作记录进行处理,比如说我想恢复到某个节点的commit,可以类似于图下的操作流程:
如上图,我们先通过git reflog查看了当前分支的提交记录,然后选取了HEAD@{1}这个版本进行reset,就可以恢复到对应的版本了。【reset命令也可以使用对应版本号来指向,不一定要用head的形式】