我有一个本地存储库,我想从远程存储库获取最新的更改。我知道我可以克隆但克隆只适用于新目录。我知道我可以删除本地存储库然后克隆但我想知道如果有Mercurial方式它是如何做的。
编辑:如果存在冲突,hg pull -u不起作用。我不想解决冲突,我只想获得远程仓库的全新副本而不管本地更改。
回答:简答:也许可以做到(见下面的答案),但重新克隆更容易。答案很长:如果您想从远程获取最新信息并忽略本地更改和提交,那么您将必须克隆到新的本地存储库或删除本地存储库并克隆另一个存储库。这是因为如果您有相互冲突的更改,那么hg将强制您手动解决它们。
哪个好,但我只是想知道是否可以在不删除本地仓库的情况下完成。
答案 0 :(得分:5)
我认为你只是在寻找这个:
hg pull
hg up --clean
这将从远程存储库中提取最新的一组修订版,然后使用干净的副本更新本地存储库,无论您是否对文件进行了任何更改。没有必要合并。
唯一需要注意的是,如果您已将文件添加到本地存储库,并且尚未提交,则更新后它们将被孤立(保留在原位,但不在存储库中)。如果您执行hg stat
,您应该看到它们带有问号。如果添加的文件已提交到本地存储库,Mercurial将在它们之后正确清理。
这是远程存储库(远程rev 6):
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 3/24/2011 2:16 PM .hg
-a--- 3/24/2011 2:16 PM 83 addedtoremote.txt
-a--- 3/24/2011 1:56 PM 726 sample.txt
这是本地存储库(早期从远程版本4克隆),包含已更改和添加的文件(本地版本5):
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 3/24/2011 2:03 PM .hg
-a--- 3/24/2011 2:05 PM 9 sample.txt
-a--- 3/24/2011 2:05 PM 58 addedtolocal.txt
执行pull and clean更新后,这是本地存储库(本地版本6):
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 3/24/2011 2:17 PM .hg
-a--- 3/24/2011 2:17 PM 83 addedtoremote.txt
-a--- 3/24/2011 2:15 PM 726 sample.txt
sample.txt
的更改已被删除,addedtolocal.txt
已被删除且addedtoremote.txt
已添加。
答案 1 :(得分:2)
看起来您正在寻找hg strip
,它不属于Mercurial核心。它可以通过MqExtension获得。您可以通过在.hgrc或Mercurial.ini文件中添加以下内容来启用它(https://www.mercurial-scm.org/wiki/MqExtension)
[extensions]
mq =
然后你将能够:
hg strip rev
这会将您的更改集移除到不应发生任何合并冲突的位置。这会影响分支历史。但话又说回来,这并不是那么糟糕,如果你保留它们,任何好的未来变革都会有一个你决定捣蛋的祖先。
如果你只是尝试一些东西,你最好在一个单独的分支中进行,这个分支很容易被关闭并稍后放弃。
如果您真的希望保留糟糕的变更集,可以将配置选项传递给合并命令,如下所示
hg --config ui.merge=internal:other merge
Mercurial tips and tricks中记录了这一点。
答案 2 :(得分:1)
从远程仓库中“拉”更改。认为“拉”和“推”是回购之间的变更集交易。
完成后,您必须“更新”来源。
答案 3 :(得分:0)
您可以重新定义修改,最大限度地减少合并的需要。只需致电hg pull --rebase
您必须在rebase
~/.hgrc
分机号码
[extensions]
rebase =
答案 4 :(得分:-1)