代码之家  ›  专栏  ›  技术社区  ›  MidnightLightning

git分支几次提交?

git
  •  3
  • MidnightLightning  · 技术社区  · 14 年前

    A---B---C-----------------D---E---F master
             \
              G---H---I---J---K---L branchA
    

    当我开始研究branch a时,我意识到最后几次提交是为了一个应该是一个新分支的新特性。所以我想让这棵树看起来像:

    A---B---C-----------------D---E---F master
             \
              G---H---I------------M branchA
                       \
                        J---K---L branchB
    

    我不想重命名分支,因为这会将G、H和I重命名为新的分支名称。我可以创建一个新的分支,从( git branch branchB <SHA-of-I> git merge branchA 而在branchB上,只需将branchB头部快速向前移动到与branchA相同的点。

    3 回复  |  直到 14 年前
        1
  •  6
  •   Cascabel    14 年前

    你不需要移动J,K和L。你想把它们放在branchB上吗?使branchB指向commit L。

    git branch branchB branchA    # start branch B at commit L
    git checkout branchA
    git reset --hard <SHA1-of-I>
    
    # If you don't want to check out branchA, you could use
    #     git branch -f branchA <SHA1-of-I>
    

    需要移动的是 布兰卡

    git rebase --onto <SHA1-of-I> <SHA1-of-L> branchA 把branchA上的commit L移到commit I上。

        2
  •  0
  •   csch0    14 年前

    你试过用 git rebase ?

        3
  •  0
  •   vhallac    14 年前

    我不明白你对G,H的担心,我出现在布兰卡而不是布兰卡。我的意思是,如果你把 branchA branchB I 创建新的 ,并提交 M 布兰卡

    据我所知,这些分支只是被命名为指向特定提交的heads(看看.git/refs/heads),而树的其余部分则完全由git中的父子关系决定。即使您设法将J-K-L重新定位到一个新的branchB上,并将M提交到现在的空白空间,对象数据也将是相同的。M和J都会指向I作为他们的父母,G/D会指向C作为他们的父母,其余的只指向他们的直系父母。我是不是丢了什么东西?