(git)如何将所有修订从现有分支合并到另一个分支?

时间:2011-08-31 14:37:46

标签: git merge

我的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   -----    -------

感谢。

3 个答案:

答案 0 :(得分:1)

你应该能够挑选合并提交(在合并两个分支后创建),理论上应该做你想要的。

答案 1 :(得分:1)

你可以:

  1. 创建分支f1_cpy(在f1上)和分支f3_cpy(在f3上),这些是您将移动/申请的两个副本;
  2. 结帐到f1_cpy,将其重新绑定到stand,然后将其合并到stand;
  3. 结帐到f3_cpy,将其重新绑定到stand(现在包含f1_cpy),然后将f3_cpy合并到stand

  4. 这实际上就像挑选樱桃一样,但可能更容易理解和管理/使用。

    使用复制分支是因为当出现问题时,您不会破坏您的真实历史
    如果您不使用复制分支并最终失去宝贵的历史......请深呼吸并潜入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