我的git仓库中有3个分支:主人,站立和开发。对于每个功能,我从开发创建新的brach。 功能完成后,我会将其分支到开发(使用 - no-ff 选项)。
例如,我在开发中合并了3个功能( f1 , f2 , f3 ),我删除了 f1 , f2 , f3 (或者它是在另一台机器上创建的,并且开发人员没有将其推入原始仓库)进入开发。 现在我想把 f1 和 f3 “放到立场分支(它有多个提交,我无法使用 cherry-pick )我该怎么办?
当然,我可以为修订范围合并创建 cherry-pick 脚本,但也许,我有更好的方法来合并它(通过旧的分支名称或其他东西)。
my repo:
develop ---
/
stand ---
/
master ---
feature branches:
f1 f2 f3
/ \ / \ / \
develop ----------------
i want: f1 f2 f3
develop ----------------
stand ----- -------
感谢。
答案 0 :(得分:1)
你应该能够挑选合并提交(在合并两个分支后创建),理论上应该做你想要的。
答案 1 :(得分:1)
你可以:
f1_cpy
(在f1
上)和分支f3_cpy
(在f3
上),这些是您将移动/申请的两个副本; f1_cpy
,将其重新绑定到stand
,然后将其合并到stand
; f3_cpy
,将其重新绑定到stand
(现在包含f1_cpy
),然后将f3_cpy
合并到stand
。这实际上就像挑选樱桃一样,但可能更容易理解和管理/使用。
使用复制分支是因为当出现问题时,您不会破坏您的真实历史。
如果您不使用复制分支并最终失去宝贵的历史......请深呼吸并潜入git reflog
。
但是做使用副本,所以你可以随意玩。
在你受伤之前,杂耍刀只是很棒。 :|
(我从git-rebase中吸取了教训。)
答案 2 :(得分:1)
如果您不再拥有分支机构,幸运的是您使用了--no-ff
以便可以恢复它们。查看gitk并在develop
上为功能1找到合并提交之前的最后一次提交的SHA1。然后再将其取回:
git branch f1 SHA1
然后将它们放在stand
上,执行:
git rebase --onto stand develop f1
git checkout stand
git merge f1
git rebase --onto stand develop f3
git checkout stand
git merge f3