【问题标题】:Moving unstaged + uncommitted changes between Mercurial branches在 Mercurial 分支之间移动未分级 + 未提交的更改
【发布时间】:2016-06-06 22:09:03
【问题描述】:

我克隆了一个 Mercurial 存储库并做了一堆本地工作,然后忘记为上述工作创建一个功能分支。

正常流程是:

  1. 克隆
  2. 创建分支
  3. 切换到该分支
  4. 在那个分支做你的工作
  5. 推那个分支
  6. 代码审查
  7. 如果代码审查通过,将分支与default(本地)合并
  8. 将合并的更改推送到default
  9. 关闭功能分支

所以我需要创建一个新分支,将我所有未暂存/未提交的代码更改(对default 进行的)移植到该分支(这样default 现在是干净的并且新分支包含我的更改),并且然后推送我的功能分支。

我通过hg branch new_feature 创建了新分支。但是在翻阅了 Merucial 文档之后,我无法弄清楚下一步。

所以我问:我如何将所有未暂存/未提交的更改从default 移动(不仅仅是复制)到我的new_feature 分支)?

【问题讨论】:

  • 不能只设置分支名称然后提交吗? hg branch feature-X 后跟普通的hg commit -m "added feature X" ?
  • 谢谢@LasseV.Karlsen (+1) - 我想我不知道...hg branch 克隆 default 是否像它目前的样子(包括我的更改),或者确实它根据我最初克隆 repo 时的外观克隆 default?
  • 两者都不做,它只是记录你想要提交的分支名称。您的工作文件夹中没有任何变化。
  • 如果您检查.hg 文件夹,那里应该有一个名为branch 的文件,这是一个包含您当前所在分支名称的文本文件。如果你执行hg branch X,这个文件的内容将是X,然后当你提交时,你将提交一个新的变更集到分支X。

标签: mercurial branch dvcs


【解决方案1】:

你不应该做任何特别的事情。

您未提交的工作文件夹更改是流动的,您可以在提交之前设置分支名称,而不会丢失您的更改。

如果您在命令行上,只需执行以下操作:

hg branch feature-X
hg commit -m "Added feature X"

如果您使用 TortoiseHg,只需单击提交消息输入字段上方的“分支:默认”按钮,然后选择“打开一个新的命名分支”并为其命名,然后单击确定,然后正常提交。

在提交期间设置要使用的分支名称实际上不会更改您的工作文件夹,它不会进行更新,它不会做任何事情,除了在元数据中记录分支名称应该是什么。

还请注意,这只允许您创建一个新的分支来提交。如果您想在现有分支上继续,您首先需要更新到该分支的头部,这可能会导致您的工作文件夹发生更改。但是,如果您想创建一个新分支,则不需要这样做。

【讨论】:

  • 谢谢@Lasse V. Karlsen (+1) - 你介意解决我上面的一个问题吗(根据你的评论)?再次感谢!
  • 这方面没有什么好担心的,因为执行hg branch X只会记录下一次提交应该在分支X上。
  • 请注意,分支可能不是仅创建单个功能的最佳选择。在这种情况下,也许书签是比永久占用其名称的分支更好的选择,即使它已被合并回默认值?
猜你喜欢
  • 1970-01-01
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 2021-05-01
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多