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

目录
相关文章
|
4月前
|
JSON 开发工具 git
git rebase 合并当前分支的多个commit记录
git rebase 合并当前分支的多个commit记录
|
22天前
|
测试技术 持续交付 开发工具
[译] 为何每次 Git Commit 要尽可能小?
[译] 为何每次 Git Commit 要尽可能小?
|
3月前
|
开发工具 git
git切换到另一分支更改也会随之过去
git切换到另一分支更改也会随之过去
65 1
|
4月前
|
开发工具 git
Git 分支删除后恢复
Git 分支删除后恢复
54 0
|
开发工具 git
Git不提交文件的ChangeList使用和撤销本地commit的代码
Git不提交文件的ChangeList使用和撤销本地commit的代码
119 0
|
Linux 开发工具 git
git commit编辑器
git commit编辑器
|
开发工具 git
git 操作之合并其它分支的某次提交(commits)到当前分支
git cherry-pick合并其它分支的某次提交(commits)到当前分支
289 0
|
开发工具 git
如何在 Git 中撤消最近的本地提交?
如果不小心将错误的文件提交到 Git,但尚未将提交推送到服务器。如何从本地仓库撤消这些提交?你完成了一次简单的提交 git 操作,但经过一些推送前的检查,发现存在很多问题,需要重新修改,需要撤消此次操作。如果,你是一个很熟悉 git 操作的人来说,这很简单,反之,希望你能好好看看此文。
208 0
|
开发工具 git
怎么撤销 git commit 提交的代码
怎么撤销 git commit 提交的代码
224 0
怎么撤销 git commit 提交的代码
|
开发工具 git
Git中撤销中间的某次merge代码
在开发过程中发现分支中间某次merge存在dev代码,需要把这个merge去掉,但不影响后续的提交
469 0