Git 将主机头移动到分支
我有几个功能分支和一个主分支。功能2已完成。通常情况下,我会重新设置基址(使用远程SVN回购,并希望保留历史记录,因此没有定期合并)和ff合并。但是,由于自我分支以来master没有更改,我想将master head(位于Git 将主机头移动到分支,git,version-control,branch,dvcs,branching-and-merging,Git,Version Control,Branch,Dvcs,Branching And Merging,我有几个功能分支和一个主分支。功能2已完成。通常情况下,我会重新设置基址(使用远程SVN回购,并希望保留历史记录,因此没有定期合并)和ff合并。但是,由于自我分支以来master没有更改,我想将master head(位于E)移动到G。使用git分支-f master G不会导致任何可见的更改,我假设这是因为G位于不同的分支上 在这里使用git update ref-f master G安全吗?我应该坚持使用rebase/ff合并吗?还有更好的吗 feature1 C-D
E
)移动到G
。使用git分支-f master G
不会导致任何可见的更改,我假设这是因为G
位于不同的分支上
在这里使用git update ref-f master G
安全吗?我应该坚持使用rebase/ff合并吗?还有更好的吗
feature1 C-D
/
master A-B-E
\
feature2 F-G
谢谢。如果您已签出到主分支,则最好使用
git merge--no ff feature2将功能2非快进合并到主分支中。您应该以以下内容结束
feature1 C-D
/
master A-B-E-----H
\ /
feature2 F-G
您不必合并分支,重置就足够了。假设master已签出:
git reset --hard feature2
更新引用是安全的。分支头只不过是一个挂在提交上的小“读我的!”标签。按照惯例,git有时会将其拾取并挂起到不同的提交上
使用git branch-f master G不会导致任何可见的更改
git日志--decoration--oneline--all
说了什么<代码>git show master?无需合并-只需重命名分支即可。由于您不关心feature2('is done')或现有的master(位于'E'),因此您只需要以下内容
git branch -d master
git branch -m feature2 master
简单更好
请记住,其中涉及两个关键概念:
git branch -f master feature2
这将使功能2保持分支(不同于之前的两个轴功能2的衬套)。将G定期合并到master中就可以了,无需重新设置基础:
feature1 C-D
/
master A-B-E
\
feature2 F-G
git checkout master
git merge feature2
feature1 C-D
/
master, feature2 A-B-E-F-G
我想避免在可能的情况下定期合并到master以保留历史,我在问题中这样说过。还有,为什么你认为无ff合并比ref move更合适?在这种情况下,重置在功能上等同于快进合并。在搜索答案的五分钟后,我尝试了这个方法,它成功了。简单,并且在反思中期待。非常感谢。将
G
定期快速合并到master
中有什么问题?不需要重新设定基准。你会保留历史,你会得到一个直线图(a-B-E-F-G
)。啊,它的明显性!该图形看起来与重新设置基础后的图形完全相同。我想知道我为什么会想到别的事情。是否要重新发布作为答案?分支功能2已经有一个“直图”-只需将功能2重命名为master(或将master移动到功能2)@GoZoner这只是一行和两行打字的细微差别。遵循编程的第一个优点;)当然,现在我们都发布了18种方法来做完全相同的事情;pMy bad,我为git分支主SHA
输入了错误的SHA。它确实起作用了。谢谢,戈佐纳。不错的选择,我还没想过。但我想我在我的情况下坚持ff合并。似乎在本地工作。但是如何将更改推送到远程服务器?它抱怨移动“主机”会导致与所有远程设备不一致,从而导致非快进合并。修复方法是git push master--force,但是'--force'参数应该让您警惕它对
的任何其他用户的影响