通过移动分支指针向后移动git

时间:2015-03-12 15:34:38

标签: git

让我们考虑一下这种情况:

                  v devel
o--x--o--o--o--o--o
                \ 
                 o--o
                    ^ feature

我想将devel分支移至x并将其替换为新名称:

   v devel        v fork
o--o--o--o--o--o--o
                \ 
                 o--o
                    ^ feature

关于SO的其他问题,我发现git update-refgit rebase可能有所帮助。然而,我找到的解决方案是:

git branch -m devel fork
git checkout -b devel x   # where x is the commit number `x`

这是正确的解决方案吗?

1 个答案:

答案 0 :(得分:1)

您的解决方案是最简单的方法(在我看来)。

并且,只要您不修改现有提交,如果您将更改推送到远程存储库(也可能被其他人使用),它就不会产生不良副作用。

但是,请勿在{{1​​}}的新位置提交任何内容。如果你这样做并推动你的改变那么你就会混淆你的同事。

假设您提交了分支devel的新位置(这就是为什么要移动它,对吧?)并推送您的更改。你的回购(以及原产地)看起来像这样:

devel

但是您的同事拥有原始树( v fork o--o--o--o--o--o--o \ \ o o--o ^ devel ^ feature 位于develfork不存在)。当他们尝试fork时,git会尝试将您的pull合并到devel(他们的fork)。因为现在两个分支都不是另一个分支的祖先,devel是不可能的,并且合并它们需要创建新的提交。这可能不是你(和他们)想要的。

总而言之,向后移动分支通常是一个坏主意。你被警告了!