如何从特定的开发分支提交到特定的主分支提交

时间:2015-07-22 11:57:18

标签: git github rebase git-rebase

我有这样的主分支:

A->B->C->D->E

这样的开发分支:

A->B->C->D->E->F->G->H->I
                  ^
                  |- This should be used

我想在G之上应用D。我怎么能这样做?

我试过了:

git checkout develop
git rebase 82c7b6a 

但这给了我合并冲突。

我的主要目标是保留主分支并删除开发分支。

主要:A->B->C->D->G->H->I

3 个答案:

答案 0 :(得分:2)

我会挑选那个提交。

git checkout master
git cherry-pick G
git cherry-pick H  (EDIT 3)
git cherry-pick I  (EDIT 3)
git branch -D develop

修改

我没有看到你不想要E.然后就是:

git checkout master
git reset --hard HEAD^1
git cherry-pick G
git cherry-pick H  (EDIT 3)
git cherry-pick I  (EDIT 3)
git branch -D develop

编辑2

@ckruczek指出更多故障安全解决方案将使用rebase interactive。

git checkout master
git reset --hard develop
git rebase -i D
git branch -D develop

使用您不想要的提交删除这些行。

编辑4

由于这是历史重写,使用上层方法可能会遇到严重问题。

我建议使用以下解决方案:

A->B->C->D->E->!E->G->H->I

要做到这一点:     git checkout master     git revert E     Git cherry-pick G H I     git branch -D develop

答案 1 :(得分:0)

如果您是唯一的用户,请尝试此操作。

1. git checkout develop
2. git rebase --onto master~1 F I  /* move commits G, H and I on master~1 (D) */
3. git checkout I
4. git rebase master

最后你可以删除分支开发

7. git branch -D develop

答案 2 :(得分:0)

如果您想跳过E - F,您可以完全明确变基数:

git rebase --onto master G~1 develop

您必须解决潜在的冲突。

当你完成后,你可以移动你的主人并放弃开发:

git push . develop:master
git checkout master
git branch -d develop