使用git rebase和merge合并特定commits到master分支

可能大家知道如何使用cherry-pick从一个分支合并特定的commits到另一个分支,但是这个方法不能保留原始的提交信息(比如提交时间线等),而如果要保留合并过来的commits的所有提交信息,那么我们就需要使用git rebasegit merge这两个强大的命令。

准备工作

首先,用git log查看一下你想选择哪些commits进行合并,例如:

dd2e86 - 946992	- 9143a9 - a6fd86 - 5a6057 [master]
           \
            76cada - 62ecb3	- b886a0 [feature]

假设你需要合并feature分支的commits 76cada-62ecb3master分支,并且保留所有提交信息,那我们可以使用git rebasegit merge的命令组合

使用git rebase合并一系列commits

首先需要基于feature创建一个临时分支,指明临时分支的最后一个commit62ecb3

git checkout -b temp-branch 62ecb3

然后,rebase这个临时分支的commitmaster76cada^ 指明你想从这个这个commit开始(一直到commit 62ecb3)。

git rebase --onto master 76cada^

得到的这个temp-branch就是feature分支的commits 76cada-62ecb3 都被合并到了master分支所有提交的最后,但是保留所有的提交信息(包括提交时间),整个过程是这样的:git rebase 把你的temp-branch分支里的commits 76cada-62ecb3取消掉,并且把它们临时保存为补丁(patch)(这些补丁放到.git/rebase目录中),然后把temp-branch分支更新到最新的master分支,最后把保存的这些补丁应用到temp-branch分支上。

使用git merge把这些commits合并到master

现在temp-branch这个临时分支还是不能同步到远程的master分支,还需要做下面的操作:

git checkout -b master origin/master
git merge temp-branch

我们来检查下master分支是否已经合并feature分支的commits 76cada-62ecb3了:

git log

确认没有问题就可以提交到远程仓库了:

git push
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页