我有2个分支,说" branch_1"和" branch_2"像这样:
A <--master
\
B <--branch_1
\
C <--branch_2
现在我在branch_1中进行了更改并修改了HEAD提交。所以现在设置如下:
A <--master
|\
| B_amended <--branch_1
|
B---C <--branch_2
branch_1上的git log显示在A的HEAD提交之上提交B_amended。在branch_2上的git日志显示提交B和C在HEAD提交之上.Crown_2上的提交B不包含提交的修改B_amended on branch_1。
我的问题是:如何将B_amended带入branch_2以使其看起来像这样?
A <--master
\
B_amended <--branch_1
\
C <--branch_2
现在我正在做:
$ git checkout branch_2
$ git reset --soft HEAD~
$ git stash
$ git rebase branch_1
$ git stash apply
$ git commit
有更好的方法吗?
答案 0 :(得分:2)
在你的情况下,你可以结帐branch_1和git cherry-pick branch_2,它会将C提交提取到你的branch_1和git reset --soft branch_2
的提示上,以将branch_2放到最新的提交上。
你也可以做一个rebase(可能更直接),git rebase --onto branch_1 branch_2~1 branch_2
来自git merge --help:
First let's assume your topic is based on branch next. For example, a feature developed in topic depends on
some functionality which is found in next.
o---o---o---o---o master
\
o---o---o---o---o next
\
o---o---o topic
We want to make topic forked from branch master; for example, because the functionality on which topic
depends was merged into the more stable master branch. We want our tree to look like this:
o---o---o---o---o master
| \
| o'--o'--o' topic
\
o---o---o---o---o next
We can get this using the following command:
git rebase --onto master next topic
Another example of --onto option is to rebase part of a branch. If we have the following situation:
H---I---J topicB
/
E---F---G topicA
/
A---B---C---D master
then the command
git rebase --onto master topicA topicB
would result in:
H'--I'--J' topicB
/
| E---F---G topicA
|/
A---B---C---D master
This is useful when topicB does not depend on topicA.
答案 1 :(得分:-1)
我确实找到了一个更好的方法:执行交互式rebase并从“branch_2”中删除提交“B”。
所以在“branch_1”中的“B_amended”之后,请执行以下操作:
$ git checkout branch_2
$ git rebase branch_1 -i
在弹出的编辑器中,删除相当于以下内容的行:
pick B
保存并退出
这样做基本上只会在“B_amended”上重播“C”。