我有一棵这样的树:
(commit 1) - master
\-- (commit 2) - (commit 3) - demo
\-- (commit 4) - (commit 5) - PRO
字符串
我必须把PRO分支移到master分支
(commit 1) - master
|-- (commit 2) - (commit 3) - demo
\-- (commit 4) - (commit 5) - PRO
型
我试过PRO分支的git rebase master
,但没有任何React。
澄清:我在master中工作,然后我必须做一个产品演示(git checkout -b demo
和一些提交)。然后,我错误地从demo创建了另一个分支(git checkout -b PRO
和一些提交),现在我需要将PRO分支移动到master,并保持demo不变。最后,demo和PRO都将挂起。
6条答案
按热度按时间cx6n0qe31#
假设
newBase
是你想要转移提交的分支,oldBase
是你的分支的旧基础,你可以使用--onto
:字符串
考虑到你的情况:
型
基本上,您将从
demo
之后到PRO
(包括PRO
)的所有提交,并将它们转换为master
提交。imzjd6km2#
我会尽我所能做到一般化。首先,确保您在所需的分支上:
字符串
然后使用以下命令(其中
new-base-branch
是您希望作为新基础的分支,current-base-branch
是您当前基础的分支)。型
**如果你没有冲突,那么很好-你完成了。如果你有(在大多数情况下),那么请继续阅读。
可能会出现冲突,您必须手动解决它们。Git现在尝试在
current-branch
、current-base-branch
和new-base-branch
之间进行“3-way merge”。大致上,这就是git内部的工作方式:new-base-branch
之上重定current-base-branch
的基。可能会有冲突;你得手动解决在此之后,通常执行git add .
和git rebase --continue
。它将为此创建一个新的临时提交temp-commit-hash
。1.在此之后,Git将在
temp-commit-hash
之上重定current-branch
的基。可能会有更多的冲突,您将不得不再次手动解决它们。完成后,再次使用git add .
和git rebase --continue
继续,之后,您已经成功地将current-branch
重定在new-base-branch
之上。**注意:**如果你开始搞砸了,那么你可以在rebase过程中随时执行
git rebase --abort
,然后回到起点。zaqlnxep3#
checkout 到
PRO
分支,复制该分支的最旧(* commit 4 )和最新( commit 5 *)提交哈希并粘贴到其他地方:字符串
删除
PRO
分支(为了安全起见,保留一个备份)。从master
创建并 checkout 到新的PRO
分支:型
将前一个
PRO
分支的提交范围(cherry-pick)放入新的PRO
分支:型
现在,如果一切正常,那么强制(-f)推送到
remote PRO
分支并删除本地PRO.bac
分支:型
ao218c7q4#
我有一个稍微不同的方法,使用reset和stashes,避免删除和重新创建分支,以及消除切换分支的需要:
字符串
通过在一个提交一个提交的基础上重置分支,你基本上只是一次一个提交地倒回分支历史。
5fjcxozz5#
另一个没有提到的选项是使用interactive rebase,你可以简单地标记
commit 2 & commit 3
删除,只保留commit 1 & commit 4 & commit 5
。字符串
kgsdhlau6#
字符串