Mercurial说“中止:未完成的未提交的更改”,我不想提交

时间:2011-01-14 22:04:01

标签: mercurial push commit

场景:在我离开办公室之前的本地回购

$ hg status

M important/update1
M another/important/update2
M work/in/progress

我想提交并推送 important / update1 important / update2 ,因为我想在回家后将这些文件提取到我的本地仓库。我还没准备好提交 work / in / progress 。实际上它甚至没有正确解析。该文件在我的IDE中打开,我只想保持原样。

现在我这样做:(赶紧,电车三分钟后离开)

$ hg commit important/update1 another/important/update2
$ hg push

pushing to https://**censored**
searching for changes
abort: push creates new remote heads on branch 'default'!
(did you forget to merge? use push -f to force)

确定。同事推了一些东西......(电车在两分钟后离开......)

$ hg pull (really important update!)
$ hg update

abort: outstanding uncommitted changes

垃圾。我需要同事更新,但我不会提交 work / in / progress ,更不用说了!我只是错过了我的电车......

你是如何处理的?

5 个答案:

答案 0 :(得分:35)

如果您不想使用搁置,只需3个命令就可以完成:

hg diff > mylocalchanges.txt

hg revert -a

# Do your merge here, once you are done, import back your local mods

hg import --no-commit mylocalchanges.txt

答案 1 :(得分:7)

使用attic extension暂时搁置/保存正在进行的作业。

答案 2 :(得分:6)

同时开发多个功能/错误修复程序的人员工作流程

一种可能性是克隆与您开发的功能一样多的存储库。但这可能在磁盘空间,时间以及混乱方面都很昂贵。另一种可能性是在同一个本地存储库上处理不同的主题(让我们称之为Main),但只使用第二个来有选择地将一个或多个所需的功能提交到中央存储库。

本文对此进行了详细解释和详细说明:

https://blogs.oracle.com/tor/entry/mercurial_tip_checking_in_regularly

如果您遇到以下错误消息:

  • “abort:push创建新的远程头部!”(潜在的多头)
  • “abort:crossses branches(使用'hg merge'或'hg update -C')”(工作目录在不同的分支而非拉动变化),或
  • “abort:未完成的未提交更改”(由于本地修改而无法合并)

然后上面的文章解释了为什么会发生这一切,并提出一个工作流程来避免这些问题。注意:也可以使用mqueues补丁机制推送您的更改(请参阅文章的评论#1)。

希望它会有所帮助。

答案 3 :(得分:5)

我通常使用TortoiseHg shelve extension,您也可以激活它以在cmdline上使用:

[extensions]
tortoisehg.util.hgshelve =

现在您可以使用命令:

$ hg shelve

如果您知道更新不会干扰我们的工作,您还可以强行提取/更新(hg pull -f)。

答案 4 :(得分:1)

如果您只是想将代码暴露给网络,以便您可以继续在家工作,我不知道您的同事应该推送到同一个回购网站。您可以考虑使用开发人员存储库:供您个人使用的仓库(通过权限,或仅通过执行/礼貌)。

某些程序(例如FogCreek's Kiln SW)提供此功能,但即使您只将存储库存储在网络/共享驱动器上,您也应该可以在那里创建个人存储库。

如果不是这种情况(即:您没有服务器权限),您还可以考虑使用命名分支。在这种情况下,您只需提交您的命名分支并将该分支推送到服务器。据推测,你的同事会单独离开你的命名分支,并没有什么新东西可以拉动和合并。就“分支杂乱”而言,是的,它们在回购的生命周期中存在,但在合并之前关闭指定的分支将从您的视线中移除它们并解决一些问题。

> hg update <branch name>
> hg commit --close-branch -m 'closing branch <branch name>'

在一天结束时,除非您(a)拥有一支庞大的团队或(b)没有关闭您的分支机构,否则我不认为分支混乱是一个主要问题。