【发布时间】:2019-06-05 12:04:08
【问题描述】:
当我有 3 个这样的分支时:
- feature/my-branch-1
- feature/my-branch-2
- feature/my-branch-3
我正在开发feature/my-branch-1
一旦我跑了
hg push
我是推送所有这 3 个分支还是只推送工作分支 (feature/my-branch-1)?
【问题讨论】:
标签: mercurial
当我有 3 个这样的分支时:
我正在开发feature/my-branch-1
一旦我跑了
hg push
我是推送所有这 3 个分支还是只推送工作分支 (feature/my-branch-1)?
【问题讨论】:
标签: mercurial
默认情况下,它将推送所有尚未在目标存储库中的分支上的任何变更集。
您可以使用-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,则专门 push 将查找不在目标位置的任何 draft 或 public 更改,并仅推送这些更改。它不会推送任何 secret 变更集。一旦它们被推送,草稿变更集的阶段就会更改为公开。
(您可能有未推送的公共变更集 - 例如,如果您明确将它们的阶段标记为公共,或者如果您在之前没有使用过它们时转换为使用阶段。)
重点是,如果您想控制推送哪些变更集,阶段是一个不错的选择。您可以将所有内容默认设置为机密,并且只有在准备好后才手动将内容标记为草稿。这意味着您始终可以安全地提交,而不会冒着推送未准备好的东西的风险。
# 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 询问的确切场景,但它在拓扑上非常相似。)在这种情况下,每个额外的头都是一个“匿名分支”。
默认情况下,push 不允许在目的地创建新的 head, 因为多个磁头会导致不清楚使用哪个磁头。
如果您确实需要,可以“使用 -f/--force 选项来推动多个头,这将推动所有分支上的所有新头”它建议“几乎总是会导致
让合作者感到困惑”。
第二种情况是,如果您要推送的分支在目标中尚不存在。 Hg 将需要额外的轻推来推动该分支:
如果你想允许 push 创建一个新的命名分支,请使用 --new-branch 目的地不存在。这允许您只创建一个 新分支而不强制进行其他更改。
(来自hg push --help的文本sn-ps)
【讨论】: