Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 我可以对tip和push(使用Mercurial)进行较旧的修改吗?_Version Control_Mercurial_Dvcs_Backout - Fatal编程技术网

Version control 我可以对tip和push(使用Mercurial)进行较旧的修改吗?

Version control 我可以对tip和push(使用Mercurial)进行较旧的修改吗?,version-control,mercurial,dvcs,backout,Version Control,Mercurial,Dvcs,Backout,如果我有一个好的复习:3200。然后我想测试一些东西,因为它有10行更改,我需要删除几行,即使我还在测试,我还是先提交,在一些更改之后,再提交,比如说,我做了6次提交 现在我想暂停,但我不想失去所有的测试和编写的代码,所以我想 $ hg up -r 3200 哪一个是我想要的好的、稳定的修订,现在我可以提交并作为提示推动吗?(如果可能的话,我想避免退出hg backout,因为它看起来有点糟糕,我也不想退出,因为退出会产生副作用,即“如果有人在这段时间从我身边撤走,变更可能会以某种方式回到回购

如果我有一个好的复习:3200。然后我想测试一些东西,因为它有10行更改,我需要删除几行,即使我还在测试,我还是先提交,在一些更改之后,再提交,比如说,我做了6次提交

现在我想暂停,但我不想失去所有的测试和编写的代码,所以我想

$ hg up -r 3200

哪一个是我想要的好的、稳定的修订,现在我可以提交并作为提示推动吗?(如果可能的话,我想避免退出hg backout,因为它看起来有点糟糕,我也不想退出,因为退出会产生副作用,即“如果有人在这段时间从我身边撤走,变更可能会以某种方式回到回购协议中”)

从问题和附带的评论中,听起来您希望所有新的更改都基于3200,而将以前基于3200的工作作为一个单独的分支。这很容易做到:

hg up 3200
# work work
hg ci -m "new work based on 3200"
但据我所知,没有办法把3200标为小费。一旦您提交了基于3200的内容,新的变更集将是tip,因此您可以进行一些良性的更改并提交以创建新的tip,但这有点麻烦。如果您担心其他合作者不知道使用3200作为他们工作的基础,因为mercurial不会将其标记为tip,那么另一种选择是给它一个标签,并告诉团队成员在开始工作之前确保并更新他们的工作副本到该标签。

当然是正确的,他已经提到了现在有两个头的问题。但我想强调的是,你会有两个相同分支的负责人,其他人可能很难理解发生了什么,以及使用哪个负责人

出于这个原因,将测试代码放入一个新的分支可能是有益的,为此,您必须重写历史记录。您可以通过MQ扩展实现这一点(假设3201是rev 3200的子版本,而3206是您的最后一个测试提交:

hg qimport -r 3201:3206
hg qpop -a
hg branch branchname
hg qpush -a
hg qfinish -r 3201:3206
在你的回购协议的克隆上试试这个


只有在您尚未将这些更改推送到其他地方时,才应执行此操作。

在Mercurial中,可以通过多种方式暂停操作。最简单的方法是不将其推到任何地方。在您回顾历史之后

$ hg update 3200
你可以用

$ hg push -r .
$ hg update 3206
$ hg commit --close-branch -m "Abandoning this line of development"
仅升级到3200修订版。
很重要-它意味着工作副本父修订版,在本例中为3200。3200修订版不会是本地存储库中的“tip”,因为您仍然有3201–3206修订版,编号最高的修订版始终是我们所称的“tip”.换句话说,历史是这样的:

[3199] -- [3200] -- [3201] ... [3205] -- [3206]
             ^                              ^
            "."                           "tip"
我在其中标记了当前工作副本父版本和tip版本

当您开始基于修订版3200工作时,图表将变为

[3199] -- [3200] -- [3201] ... [3205] -- [3206]
                \
                 \-------------------------------- [3207]
                                                      ^
                                                  ".", "tip"
请尽量不要过分强调“tip”。它一直在变化,通常不是很有趣。如果您跳回到3206并进行提交,则tip将表示您的存储库中新创建的修订版3208。在另一个存储库中,tip可以是其他内容,具体取决于从您处提取的内容和提取的时间

如果您经常需要执行
hg push-r.
,那么我建议您为它创建一个别名。这样的别名应该是:

在你的工具箱里,你随时都可以做到

$ hg nudge
将刚刚创建的变更集发送到服务器,而不必担心发送任何其他可能被搁置的分支

最后,请记住,您可以使用

$ hg push -r .
$ hg update 3206
$ hg commit --close-branch -m "Abandoning this line of development"
将3206变更集标记为“已关闭”。这意味着它不会出现在
hg heads
中,并且在运行
hg merge
时也不会考虑将其合并。如果将其推送到服务器,则需要使用
hg push--force
,但由于您没有创建多个打开的头部,因此可以添加另一个关闭的头部

多个开放磁头的问题在于,一个新的
hg clone
可能会更新为其中一个,这会让人感到困惑——人们不知道从哪里开始工作。对于Mercurial的最新版本,
hg clone
不会更新为封闭磁头,因此可以避免此问题


您只需在此基础上进行子提交,即可重新打开一个关闭的头。这意味着您可以暂时关闭一条开发线,而不会产生任何不良影响,除了图表中的一条说明分支在某个点关闭之外。

是的,当然。您有什么问题吗?如果有疑问,或者您只是想清楚地将您的头与子开发线分开wo“分支”,你也可以保持你中止的工作副本现在的状态,将repo克隆到一个新位置,在那里更新到rev3200,然后从那里提交/推送。我想…我既不能提交也不能推送…当我提交时,我想它说“无需提交”我明白了,您想将r3200重新提交为r3225。不确定这是否可行,这也没有太大意义。如果您想对其他人“隐藏”r3201..r3224,您不必推送它们。只需将它们保存在本地副本中,然后从r3200开始新的克隆。(您已经推送了它们,对吗?)嗯,我不需要隐藏r3201到3224…但只是它的功能尚未完成或处于实验状态…所以我只希望r3200与3225相同。我可以
hg push-f
(即“强制”它),但如果其他人在我之前或之后推,或者承诺但没有推(在我的“强制推”之前),它会影响其他人吗或者在我的“强制推”之后)如果你在某处添加一个空格,然后提交,然后推送,它会说有多个磁头,你需要合并…我试着用
提示合并,它说没有用,我必须合并旧版本,它又回到最新版本。所以我不能提交和推送。你可以做
hg推送--新分支
hg push-f
如果您知道要创建新分支