我正在为我的应用程序中的新功能创建命名的Mercurial分支,在完成特定功能后,我将该分支合并到默认分支,并关闭此功能分支。
但我想知道是否有办法完全删除那些已命名的分支,而不会丢失合并到默认分支的更改?
答案 0 :(得分:29)
没有。
合并两个分支时,合并提交取决于其两个父提交的存在。这意味着您无法删除构成合并分支的提交,除非您还删除了您不想要的合并提交。
这也不是做事情的“Mercurial方式”。当分支已合并到另一个分支,并且在该分支上没有进一步开发时,Mercurial会认识到该分支不再处于活动状态; hg branches
会将这些不活动的分支放在列表的底部。您还可以使用hg commit --close-branch
关闭分支,这将从hg branches
列表中删除分支(除非给出-c
参数)。
听起来你应该查看Mercurial队列(MQ),因为它支持与你描述的类似的工作流程。例如,您可以设置多个MQ队列,每个队列代表一个开发分支。
答案 1 :(得分:0)
在将我的合并功能分支推送到远程服务器之前,我想:“我不希望任何人知道我的分支,我更喜欢它从未存在过”。所以我决定将所有本地更改放到一个提交中,然后再推送到远程。
将起源和分支存储库复制到单独的目录中:
hg clone ssh://site//hg/repository repository-origin
hg clone /home/user/work/repository repository-branch
在存储库分支中合并默认和功能分支:
cd repository-branch
hg merge feature-branch
hg commit -m "feature-branch: merging into default"
cd ..
创建主存储库:
hg clone repository-origin repository
使用存储库分支文件(隐藏的文件除外)覆盖 master 中的所有文件:
rsync -av --exclude=".*" repository-branch/ repository
通过单次提交将 feature 分支的所有更改合并到 master :
cd repository
hg commit -m "feature-branch: merging into default"
推送到远程
在最后一次提交消息中从不需要的分支中获取所有/一些提交信息可能是件好事。