我正在为我的应用程序中的新功能创建命名的 Mercurial 分支,在完成特定功能后,我将该分支合并到默认分支中,并关闭此功能分支。
但我想知道是否有办法完全删除那些命名分支,而不会丢失合并到默认分支中的更改?
我正在为我的应用程序中的新功能创建命名的 Mercurial 分支,在完成特定功能后,我将该分支合并到默认分支中,并关闭此功能分支。
但我想知道是否有办法完全删除那些命名分支,而不会丢失合并到默认分支中的更改?
不,没有。
当您合并两个分支时,合并提交取决于其两个父提交的存在。这意味着您不能删除构成合并分支的提交,除非您还删除了您不想这样做的合并提交。
这也不是做事的“善变方式”。当一个分支被合并到另一个分支,并且没有对该分支进行进一步开发时,Mercurial 会识别出该分支不再处于活动状态;hg branches
会将那些不活动的分支放在列表的底部。您也可以使用 关闭分支hg commit --close-branch
,这将从hg branches
列表中删除分支(除非-c
给出参数)。
听起来您应该研究 Mercurial 队列 (MQ),因为它支持与您描述的类似的工作流程。例如,您可以设置多个 MQ 队列,每个队列代表一个开发分支。
就在将我的合并功能分支推送到远程服务器之前,我想:“我不希望任何人知道我的分支,我希望它从未存在过”。因此,我决定在推送到远程之前将所有本地更改放入一个提交中。
将原始存储库和分支存储库克隆到单独的目录中:
hg clone ssh://site//hg/repository repository-origin
hg clone /home/user/work/repository repository-branch
在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
使用单个提交合并从功能分支到主分支的所有更改:
cd repository
hg commit -m "feature-branch: merging into default"
推送到远程
在最后一个提交消息中包含来自不需要的分支的所有/某些提交的信息可能会很好。