让我们考虑这种情况:
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-ref
或git rebase
可能会有所帮助。但是,我找到的解决方案是:
git branch -m devel fork
git checkout -b devel x # where x is the commit number `x`
这是一个正确的解决方案吗?
您的解决方案是最简单的方法(在我看来)。
而且,只要您不修改现有提交,如果您将更改推送到远程存储库(可能也被其他人使用),它就不会产生不希望的副作用。
但是,不要在 devel
的新位置提交任何内容。如果你这样做并推动你的更改,那么你会让你的同事感到困惑。
假设您提交分支devel
的新位置(这就是您要移动它的原因,对吗?)并推送更改。您的存储库(以及原点)如下所示:
v fork
o--o--o--o--o--o--o
o o--o
^ devel ^ feature
但是你的同事有原始树(devel
在fork
,fork
不存在)。当他们尝试pull
git 时,git 会尝试将您的devel
合并到 fork
(他们的devel
)。因为现在两个分支都不是另一个分支的祖先,所以fast-forward
是不可能的,合并它们需要创建一个新的提交。这可能不是你(和他们)想要的。
总而言之,向后移动分支通常是一个坏主意。你已经被警告了!