Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Merge 如何正确关闭Mercurial中的功能分支?_Merge_Mercurial_Branch_Hg Merge - Fatal编程技术网

Merge 如何正确关闭Mercurial中的功能分支?

Merge 如何正确关闭Mercurial中的功能分支?,merge,mercurial,branch,hg-merge,Merge,Mercurial,Branch,Hg Merge,我已经完成了功能分支的工作feature-x。我想将结果合并回默认分支并关闭feature-x,以便在hg分支的输出中去除它 我提出了以下方案,但存在一些问题: $ hg up default $ hg merge feature-x $ hg ci -m merge $ hg up feature-x $ hg ci -m 'Closed branch feature-x' --close-branch 因此,feature-x分支(changests40-41)关闭,但有一个新的头,关闭分

我已经完成了功能分支的工作
feature-x
。我想将结果合并回
默认
分支并关闭
feature-x
,以便在
hg分支
的输出中去除它

我提出了以下方案,但存在一些问题:

$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
因此,
feature-x
分支(changests
40
-
41
)关闭,但有一个新的头,关闭分支变更集
44
,每次都将在
hg头中列出:

$ hg log ...
o  44 Closed branch feature-x
|
| @  43 merge
|/|
| o  42 Changeset C
| |
o |  41 Changeset 2
| |
o |  40 Changeset 1
|/
o  39 Changeset B
|
o  38 Changeset A
|
更新:从1.5版开始,Mercurial似乎不再在
hg heads
的输出中显示闭合分支的头

是否可以关闭合并的分支而不留下一个头部?是否有更正确的方法关闭要素分支

相关问题:


    • 编辑哎哟,太晚了。。。我知道你的评论说你想保留feature-x变更集,所以这里的克隆方法不起作用

      我还是把答案放在这里,因为它可能会帮助别人

      如果你想完全摆脱“功能X”,例如,因为它不起作用,你可以克隆。这是本文中解释的方法之一,它确实有效,并且它专门讨论了HEAD

      据我所知,您有这样的想法,希望一劳永逸地摆脱“feature-x”头部:

      @    changeset:   7:00a7f69c8335
      |\   tag:         tip
      | |  parent:      4:31b6f976956b
      | |  parent:      2:0a834fa43688
      | |  summary:     merge
      | |
      | | o  changeset:   5:013a3e954cfd
      | |/   summary:     Closed branch feature-x
      | |
      | o  changeset:   4:31b6f976956b
      | |  summary:     Changeset2
      | |
      | o  changeset:   3:5cb34be9e777
      | |  parent:      1:1cc843e7f4b5
      | |  summary:     Changeset 1
      | |
      o |  changeset:   2:0a834fa43688
      |/   summary:     Changeset C
      |
      o  changeset:   1:1cc843e7f4b5
      |  summary:     Changeset B
      |
      o  changeset:   0:a9afb25eaede
         summary:     Changeset A
      
      所以你要这样做:

      hg clone . ../cleanedrepo --rev 7
      
      您将看到以下内容,您将看到feature-x确实消失了:

      @    changeset:   5:00a7f69c8335
      |\   tag:         tip
      | |  parent:      4:31b6f976956b
      | |  parent:      2:0a834fa43688
      | |  summary:     merge
      | |
      | o  changeset:   4:31b6f976956b
      | |  summary:     Changeset2
      | |
      | o  changeset:   3:5cb34be9e777
      | |  parent:      1:1cc843e7f4b5
      | |  summary:     Changeset 1
      | |
      o |  changeset:   2:0a834fa43688
      |/   summary:     Changeset C
      |
      o  changeset:   1:1cc843e7f4b5
      |  summary:     Changeset B
      |
      o  changeset:   0:a9afb25eaede
         summary:     Changeset A
      

      我可能误解了您的要求,但请不要修改,我花了时间复制了您的用例:)

      一种方法是让合并的功能分支保持打开状态(并且处于非活动状态):

      另一种方法是在使用额外提交进行合并之前关闭功能分支:

      $ hg up feature-x
      $ hg ci -m 'Closed branch feature-x' --close-branch
      $ hg up default
      $ hg merge feature-x
      $ hg ci -m merge
      
      $ hg heads
          (1 head)
      
      $ hg branches
      default    43:...
          (1 branch)
      
      第一个更简单,但它留下了一个开放的分支。第二种方法没有留下开放的头/分支,但它还需要一个辅助提交。可以使用
      --close branch
      将对功能分支的最后一次实际提交与此额外提交结合起来,但是应该提前知道哪一次提交将是最后一次提交

      更新:自Mercurial 1.5以来,您可以随时关闭分支,因此它将不再出现在
      hg分支
      hg头
      中。唯一可能让你恼火的是,从技术上讲,修订图在没有childen的情况下还会有一次修订

      更新2:自Mercurial 1.8以来,书签已成为Mercurial的核心功能。书签对于分支比命名分支更方便。另见这个问题:


      imho有两种情况下分支机构忘记关闭

      案例1: 分支未合并到默认值中

      在本例中,我更新到分支并使用--close分支进行另一次提交,不幸的是,这会选择该分支成为新的提示,因此在将其推送到其他克隆之前,我确保真正的提示收到更多更改,其他人不会对该奇怪提示感到困惑

      hg up myBranch
      hg commit --close-branch
      
      案例2: 分支已合并为默认值

      这种情况与情况1没有太大区别,可以通过重现情况1的步骤和另外两个步骤来解决

      在本例中,我更新到分支变更集,使用--close branch进行另一次提交,并将成为提示的新变更集合并到默认值中。最后一个操作将创建一个默认分支中的新提示-HOORAY

      hg up myBranch
      hg commit --close-branch
      hg up default
      hg merge myBranch
      

      希望这对未来的读者有所帮助。

      奇怪的是,还没有人提出关闭功能分支的最可靠的方法。。。 您可以将合并合并提交与--close分支标志(即提交修改的文件并同时关闭分支):


      就这些。转速表上没有额外的人头。没有额外的提交。

      @Andrey:但文章指出,这篇文章不仅涉及“关闭分支”。它显示了四种修剪树枝的方法。如果你真的不想要它了,你可以按照文章中的解释进行克隆。唯一的“问题”是,无论出于什么原因,你都想关闭它,但要保留它。@WizardOfOdds是的,我已经阅读了整篇关于修剪枯枝的文章。我希望分支留在修订历史中,而不是将其丢弃。之前我只是将功能分支合并到
      default
      ,而没有“关闭”它们。它产生了0个新的头,但这些分支在
      hg branchs
      中永远可见(作为非活动分支)。要开发功能,我倾向于克隆整个存储库,然后在功能完成后将其合并回来。我不喜欢在历史上留下(封闭的)分支机构的遗迹。对于像我这样善变的新手来说,这是一个很好的明确答案。谢谢你没有使用“ci”,因为它没有被hg-help列为命令之一,所以我不知道它是什么意思:)@MB.:在这种情况下,
      hg-help-ci
      会向你解释。我相信“hg-merge”命令会告诉你,末尾还有另一个提交。
      书签比命名分支更方便进行分支,这并不一定是真的。Hg书签与Git分支不同。它们充满了许多边缘情况,这使得它们不适合作为特征分支。例如:克隆存储库时,您将在
      default
      分支中得到最新的提交。如果使用书签,则此变更集对应于随机(不稳定)书签。如果使用命名分支,您将获得稳定/默认分支中的最新提交,这通常是您想要的。书签总有一天会出现,但它们还没有出现。我使用书签作为私有标记,这些标记只在本地存储库中可见。它们充当我需要重新访问的变更集的提醒。我尝试采用这种方法,但在尝试推送时仍然出现错误:
      中止:推送创建新的远程分支:
      。我能吃点什么
      hg up myBranch
      hg commit --close-branch
      hg up default
      hg merge myBranch
      
      hg up feature-x
      hg merge default
      hg ci -m "Merge feature-x and close branch" --close-branch
      hg branch default -f