如果我正在处理一些我不想提交的文件,我只是保存它们。然后我有其他文件要推送到服务器,但是如果其他人对存储库进行了更改,并且我将它们拉下来,它会要求我合并或重新绑定.. 但这些选项中的任何一个都会导致我丢失我没有提交的本地更改。
其他人在做什么来解决这个问题?我发现搁架扩展的文档很难理解。
注意:我正在使用Mercurial Eclipse来推送文件到服务器或从服务器中提取文件。
对此的任何解释将不胜感激!谢谢!
示例:
我在Mercurial Eclipse的网站上工作。我有一个新文件夹和新文件,我不想提交到服务器。我还修改了一些现有文件,我不想让这些更改生效。
然后我网站上的某些内容中断了,我需要修复它,它不会让我修复它而不用更新或合并最新的回购提示,这将导致我丢失所有未提交的更改。
如果我不想丢失,我应该如何处理我编辑过的新文件夹和文件?重新克隆似乎很乏味。将文件复制到新文件夹似乎也很乏味。我确信Shelving或MQ会做我想做的事情,我只是不知道如何去做。
答案 0 :(得分:3)
参考你的例子情况,这就是我要做的事情(遵循Ry4an的策略,只提交你当前正在处理的事情,但不想发布):
假设你开始在像这样的存储库中工作:
$ hg status -A
C f1
C f2
$ hg glog
@ changeset: 1:7f3c6c86a92f
| tag: tip
| summary: add f2
|
o changeset: 0:03ca1e6d5b86
summary: initial
即有2个文件和2个提交/更改集。你做了一些工作,比方说添加一个新功能,然后你的工作副本可能如下所示:
$ hg status
M f2
? f3
? f4
有2个新文件和1个修改过的文件。现在,您必须修复一个错误,您还需要在远程存储库中进行任何新的更改。通过提交并拉动远程更改来快照当前工作(按照您的顺序执行操作并不重要,默认情况下拉动不会触及工作副本的状态):
$ hg commit -A -m "snapshot feature work"
$ hg pull
这可能会产生如下历史记录:
o changeset: 3:2284ba62de07 <-- just pulled in
| tag: tip
| parent: 1:7f3c6c86a92f
| summary: edit f1
|
| @ changeset: 2:4a19d371a04f <-- your interrupted work
|/ summary: snapshot feature work
|
o changeset: 1:7f3c6c86a92f
| summary: add f2
|
o changeset: 0:03ca1e6d5b86
summary: initial
现在您可以更新到/ checkout修订版3并开始修复错误:
$ hg update 3
.. fix the bug ..
$ hg commit -m "fix a bug"
$ hg glog --limit 3
@ changeset: 4:5d3d947fb4af
| tag: tip
| summary: fix a bug
|
o changeset: 3:2284ba62de07
| parent: 1:7f3c6c86a92f
| summary: edit f1
|
| o changeset: 2:4a19d371a04f
|/ summary: snapshot feature work
:
看起来不错,让我们推动您的修复,即让它生效,同时不要发布您的中间工作:
$ hg push -r 4
这会推送导致修订版4的所有更改,即您的错误修正,但本地存储库中没有其他分支。您还可以使用-r .
,它指的是您的工作副本的父版本,即您刚刚提交的修订版。
最后,您可以返回功能工作并继续工作:
$ hg update 2
.. work, commit, work, commit ..
.. finally merge with the other branch, e.g. revision 4
这些步骤在命令行上,但我认为将一般概念调整为Eclipse Mercurial插件中的相应点击并不困难。
一些额外的说明:
答案 1 :(得分:2)
我相信有人会帮助你找到一个糟糕的解决方法,但最好的方法是改变你的目标 - 只是提交。尚未提交尚未提交的代码。如果您肯定无法遵守历史记录中的频繁提交,请将Mercurial Queues与队列存储库一起使用并提交。然后,您可以弹出更改集,推/拉/合并,然后重新启动它们,所有有价值的工作都将在修补程序队列中提交。