将某一段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>

目录
相关文章
|
6月前
|
JSON 开发工具 git
git rebase 合并当前分支的多个commit记录
git rebase 合并当前分支的多个commit记录
120 1
|
5月前
|
开发工具 git
git代码回退
git代码回退
71 5
|
11月前
|
搜索推荐 Java 开发工具
Git如何优雅的回退代码?
Git如何优雅的回退代码?
99 0
|
Linux 开发工具 git
git commit编辑器
git commit编辑器
|
开发工具 git
Git不提交文件的ChangeList使用和撤销本地commit的代码
Git不提交文件的ChangeList使用和撤销本地commit的代码
134 0
|
开发工具 git
如何在 Git 中撤消最近的本地提交?
如果不小心将错误的文件提交到 Git,但尚未将提交推送到服务器。如何从本地仓库撤消这些提交?你完成了一次简单的提交 git 操作,但经过一些推送前的检查,发现存在很多问题,需要重新修改,需要撤消此次操作。如果,你是一个很熟悉 git 操作的人来说,这很简单,反之,希望你能好好看看此文。
221 0
|
开发工具 git
怎么撤销 git commit 提交的代码
怎么撤销 git commit 提交的代码
239 0
怎么撤销 git commit 提交的代码
|
开发工具 git
git里commit的时候-m描述写错了,怎么修改描述
git里commit的时候-m描述写错了,怎么修改描述
1485 0
git里commit的时候-m描述写错了,怎么修改描述
|
开发工具 git
git的撤销、删除和版本回退
本文参考于廖雪峰的博客Git教程。依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查看原文。 4、通过git log查看提交历史和git reflog查看命令历史,确定回退或恢复到某一版本。 我们
215 0
git的撤销、删除和版本回退