我怎样才能从特定的开发分支提交到特定的主分支提交

How can I rebase from specific develop branch commit to specific master branch commit

我有这样的主分支:

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

像这样的开发分支:

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

我想在 D 之上应用 G。我该怎么做?

我试过这个:

git checkout develop
git rebase 82c7b6a 

但这给我带来了合并冲突。

我的主要目标是保留 master 分支并删除 develop 分支。

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

我会挑选那个提交。

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结帐大师 git 还原 E git 精选 G H I git分支-D开发

如果你是唯一的用户试试这个。

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

终于可以删除分支 develop

7. git branch -D develop

如果你想跳过 E-F 你可以做完全明确的变基:

git rebase --onto master G~1 develop

您将不得不解决潜在的冲突。

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

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