详解Git 的 rebase 命令使用方法
作者:CG国斌
在基于 Git 的开发过程中,我们很容易遇到合并代码的情况,例如我们从 master 分支拉取了一个 feature 分支,当我们开发到一段时间之后,可能需要将 master 的代码合并到我们当前的 feature 分支之中。
这时,我们有两个选择,一个是使用git merge
命令,一个是使用git rebase
命令,这两个命令都是用来合并代码的,但却有一些差异。在本文中,我们主要讲述git rebase
命令的使用方法,也会简单介绍这两个命令的差异。
如上图所示,我们从 master 分支拉取了一个名为 feature 的分支,并且在拉取新分支之后,有过三次提交记录;同时,master 分支在我们拉取 feature 分支之后,也有过两次提交记录。现在我们已经构造了背景,接下来我们合并代码。
首次,我们使用merge
命令,其命令形式一般为git merge --no-ff master
,即表示将 master 的代码合并到 feature 分支,其中--no-ff
参数是为了保留 master 分支的提交记录。如上图所示,在使用merge
命令进行代码合并之后,Git 会自动创建一个新的 commit 用来表示当前的合并操作,此 commit 记录了 master 代码合并到 feature 分支时产生的所有改动。
接下来,我们使用rebase
命令,其命令一般形式为git rebase feature
,即表示在 master 分支上执行rebase
命令,将 feature 分支的代码合并到 master 分支。如上图所示,在使用rebase
命令之后,Git 会合并两个分支的 commit 记录,其规则为「在基准分支上合并目标分支的代码,会将目标分支的提交记录全部前置到基准分支的最新提交记录之前」,就如上面这样,我们在 master 分支上使用了rebase
命令之后,Git 将 feature 分支上面的所有 commit 记录都前置到了 master 分支的最新 commit 记录之前。
在这里,需要注意的是:rebase
是以 commit 为维度的,按 commit 提交的顺序依次进行合并操作;如果在合并的过程中,某个 commit 遇到了冲突,则需要我们先解决该冲突,然后才能继续进行合并操作。特别地,在我们解决冲突之后,需要使用git add + 冲突文件
命令将当前冲突标记为已解决,然后使用git rebase --continue
命令继续合并操作。
通过上面的描述,我们能发现merge
和rebase
有一个很明显的差异,那就是当遇到冲突的时候,使用merge
命令,我们只需要解决一次冲突即可;使用rebase
命令,我们则需要依次解决每一个冲突。
对于 Git 的rebase
命令,其除了能进行代码合并之外,还有一个常用的功能,那就是将多个 commit 合并为一个,仍然以上面的 feature 分支为例,我们将其从 master 分支拉取之后,进行了三次提交,现在我们将这三个提交结论合并为一个,其命令一般形式为:
git rebase -i HEAD~N
其中,N
为我们需要合并的 commit 记录的数量,因为示例中是三次提交记录,所以在此场景下,将N
替换为3
即可。
在执行完上面的命令之后,我们会进入vi
或者vim
文件编辑器:
如上图所示,pick
标识了我们的三次提交记录,按i
建进入编辑模式,保留第一个pick
,然后将后面两个pick
修改为s
或者f
,然后键入:wq
保留修改。最后,为了将变更同步到远程分支,我们需要使用git push -f
命令,其中参数-f
表示强制提交。
到此这篇关于Git 的 rebase 命令使用方法的文章就介绍到这了,更多相关git rebase 命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!