将某一段commit粘贴到另一个分支上

简介: 当我们项目中存在多个分支,有时候我们需要将某一个分支中的一段提交同时应用到其他分支中

应用场景

当我们项目中存在多个分支,有时候我们需要将某一个分支中的一段提交同时应用到其他分支中,如图:

我们希望将develop分支中的C~E部分复制到master分支中,这时我们就可以通过rebase命令来实现(如果只是复制某一两个提交到其他分支,建议使用更简单的命令:git cherry-pick)。
在实际模拟中,我们创建了master和develop两个分支:

develop:

master:

命令使用

我们使用命令的形式为:

git rebase [startpoint]   [endpoint]  --onto  [branchName]

其中,[startpoint][endpoint]指定了一个编辑区间(前开后闭),--onto的意思是要将该指定的提交复制到哪个分支上。
所以,在找到 C (50dfead52c8d59bcda5c1d45d7d4722acfc7dad9) E (286133a430d71d65ea027ea9456306df6631c97b) 的提交id后,我们运行以下命令:

git rebase 50dfead52c8d59bcda5c1d45d7d4722acfc7dad9 286133a430d71d65ea027ea9456306df6631c97b --onto master

如果代码存在冲突,需要我们先解决一下冲突,代码中没有冲突之后执行命名:

git add <conflicted_files>

git rebase --continue


// 或者将退回到rebase之前的状态

git rebase --abort


运行完成后查看当前分支的日志:

可以看到,C~E部分的提交内容已经复制到了G的后面了,大功告成?NO!我们看一下当前分支的状态:

当前HEAD处于游离状态,实际上,此时所有分支的状态应该是这样:

所以,虽然此时HEAD所指向的内容正是我们所需要的,但是master分支是没有任何变化的,git只是将C~E部分的提交内容复制一份粘贴到了master所指向的提交后面,我们需要做的就是将master所指向的提交id设置为当前HEAD所指向的提交id就可以了,即:

     git checkout master

     git reset --hard  <commit id>

目录
相关文章
|
开发工具 git
Git合并指定commit到当前分支
有时我们需要将指定的某一次commit合并到当前分支,比如线上的一次bugfix,只合并需要的commits。 首先,用git log或GitX工具查看一下你想选择哪些commits进行合并,例如: dd2e86 - 946992 -9143a9 - a6fd86 - 5a6057 [master] \ 76cada - 62ecb3 - b886a0 [feature] 比如,feature 分支上的commit 62ecb3 非常重要,它含有一个bug的修改。
2728 0
|
9月前
|
JSON 开发工具 git
git rebase 合并当前分支的多个commit记录
git rebase 合并当前分支的多个commit记录
197 1
|
开发工具 git
Git不提交文件的ChangeList使用和撤销本地commit的代码
Git不提交文件的ChangeList使用和撤销本地commit的代码
162 0
|
开发工具 git
Git修改已提交的commit注释
Git修改已提交的commit注释
2998 0
|
开发工具 git
怎么撤销 git commit 提交的代码
怎么撤销 git commit 提交的代码
266 0
怎么撤销 git commit 提交的代码
|
机器学习/深度学习 开发工具 git
Git提交合并提交及注释
Git提交合并提交及注释
288 0
|
开发工具 git
Git - 将某个提交合并到另一个分支
Git - 将某个提交合并到另一个分支
755 0

热门文章

最新文章