【发布时间】:2012-08-26 03:33:03
【问题描述】:
我正在为我的应用程序中的新功能创建命名的 Mercurial 分支,完成特定功能后,我将该分支合并到 default 分支,并关闭此功能分支。
但我想知道是否有办法完全删除那些命名分支,而不会丢失合并到默认分支中的更改?
【问题讨论】:
标签: mercurial
我正在为我的应用程序中的新功能创建命名的 Mercurial 分支,完成特定功能后,我将该分支合并到 default 分支,并关闭此功能分支。
但我想知道是否有办法完全删除那些命名分支,而不会丢失合并到默认分支中的更改?
【问题讨论】:
标签: mercurial
没有。
当您合并两个分支时,合并提交取决于其两个父提交的存在。这意味着您无法删除构成合并分支的提交,除非您还删除了您不想这样做的合并提交。
这也不是做事的“善变方式”。当一个分支被合并到另一个分支中,并且没有对该分支进行进一步的开发时,Mercurial 会识别出该分支不再处于活动状态; hg branches 会将那些不活动的分支放在列表的底部。您也可以使用hg commit --close-branch 关闭分支,这将从hg branches 列表中删除分支(除非给出-c 参数)。
听起来您应该研究 Mercurial 队列 (MQ),因为它支持与您描述的类似的工作流程。例如,您可以设置多个 MQ 队列,每个队列代表一个开发分支。
【讨论】:
hg bookmark --delete bookmark_name 的书签。这里有很多很棒的信息:mercurial.selenic.com/wiki/Bookmarks
就在将合并的功能分支推送到远程服务器之前,我想:“我不想让任何人知道我的分支,我希望它永远不存在”。所以我决定在推送到远程之前将我所有的本地更改放在一个提交中。
将 origin 和 branch 存储库克隆到单独的目录中:
hg clone ssh://site//hg/repository repository-origin
hg clone /home/user/work/repository repository-branch
在repository-branch中合并default和feature分支:
cd repository-branch
hg merge feature-branch
hg commit -m "feature-branch: merging into default"
cd ..
创建 master 存储库:
hg clone repository-origin repository
用repository-branch文件覆盖master中的所有文件(不包括隐藏文件):
rsync -av --exclude=".*" repository-branch/ repository
使用单一提交合并从 feature 分支到 master 的所有更改:
cd repository
hg commit -m "feature-branch: merging into default"
推送到远程
在最后一条提交消息中包含来自不需要的分支的所有/部分提交的信息可能会很好。
【讨论】: