Mercurial是推动所有本地分支机构还是仅推动工作分支机构?

时间:2019-06-05 12:04:08

标签: mercurial

当我有3个这样的分支时:

  • feature / my-branch-1
  • 功能/我的分支2
  • feature / my-branch-3

我正在研究 feature / my-branch-1

我跑步

hg push

我要推送所有这三个分支还是仅推送工作分支(功能/ my-branch-1)?

1 个答案:

答案 0 :(得分:3)

默认情况下,它将在所有尚未在目标存储库中的分支上推送所有变更集。

使用-b选项只能推入选定的分支:

# hg push --help
hg push [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]

push changes to the specified destination

    Push changesets from the local repository to the specified destination.
...
options ([+] can be repeated):

..
 -b --branch BRANCH [+]     a specific branch you would like to push
..

注意1:如果您使用phases,则专门推送将查找不在目的地的任何草稿 public 更改,而仅推送那些。它不会推送任何秘密变更集。推送变更集后,变更集的阶段将更改为公开。

(您可能会取消推送公共变更集-例如,如果您明确将其阶段标记为公共阶段,或者如果您之前未使用过阶段,则转换为使用阶段。)

要点是,如果要控制要推送哪些变更集,则分阶段是一个不错的方法。您可以将所有内容默认为秘密,并且只有在准备就绪时才手动将其标记为草稿。这意味着您始终可以安全地进行提交,而不必担心会弹出尚未准备好的内容。

# hg phase --help                                                               
hg phase [-p|-d|-s] [-f] [-r] [REV...]                                          

set or show the current phase name                                              
...                                                                                
options ([+] can be repeated):                                                  

 -p --public      set changeset phase to public                                 
 -d --draft       set changeset phase to draft                                  
 -s --secret      set changeset phase to secret                                 
 -f --force       allow to move boundary backward                               
 -r --rev REV [+] target revision

注意2:在某些情况下,推送可能会表现出特殊的方式。

如果您在同一分支上有多个头像 ,那么通常默认情况下,Mercurial会抱怨并且不推送任何内容。 (这可能不是OP询问的确切场景,但是在拓扑上却非常相似。)在这种情况下,每个其他头都是一个“匿名分支”。

  

默认情况下,推送操作将不允许在目标位置创建新的磁头,       因为有多个头会使其不清楚使用哪个头。

如果确实需要,可以通过“ 使用-f / --force选项来推动多个头,这将在所有分支上推动所有新头”建议“ 几乎总是会导致         合作者的困惑”

第二种情况是,要推送的分支在目标中不存在。 Hg将需要额外的推动才能推动该分支:

  

如果要允许推送创建新的命名分支,请使用--new-branch       在目的地不存在。这样您就只能创建一个       新分支而无需进行其他更改。

hg push --help的文本片段)