放弃更改而不删除历史记录

o0'*_*0'. 178 mercurial

有一个提交只是没有用,所以我想放弃它而不从历史中删除它.

我已经从早期版本更新并承诺,从而创建了一个新的头脑.


我没有分支机构,我不想要分支机构,我只想简单地继续使用新的头部,没有花哨,没有合并,没有后顾之忧,只是继续忘记前一个.

我似乎无法找到如何做到这一点,我开始相信它无法完成.我发现的只是关于分支的东西,或者关于合并的东西.

Nia*_* C. 180

使用您想要忘记的修订版将您的存储库更新到头部,然后使用该hg commit --close-branch选项-c将该(匿名)分支标记为已关闭.然后更新到您分支的负责人想要的,并继续工作.

如果使用hg heads选项hg merge,您仍然可以看到关闭的分支,但默认情况下它不会显示,并且hg push --force不会尝试与封闭的头部合并.

您需要--force在第一次将此关闭头部推送到另一个存储库时使用,因为在推送时实际上是在远程存储库中创建了其他头.所以告诉Mercurial这是可以的hg commit --close-branch.拉开头部的人不会受到任何警告的困扰.

  • @msarchet:它也适用于匿名分支. (12认同)
  • @KrazyGlew:问题是"匿名"分支实际上只是第二个分支,其名称与它所基于的分支相同.你并没有真正试图关闭(命名)分支:你试图放弃你一直在做的改变.换句话说,`hg branches`仍应显示您所在的分支名称.而不是尝试关闭分支,将您的匿名分支合并回原始分支,丢弃所有更改. (4认同)
  • @Niall C.如果他将其标记为命名分支,那么它才会起作用吗?我假设他说他做的是默认情况 (3认同)
  • @msarchet:AFAIK,今天尝试, - close-branch不适用于匿名分支.它应该,但不是.我希望Mercurial的未来版本会有所改变.匿名分支非常好,但应该像命名分支一样作为第一类. (2认同)
  • 在我的情况下,我有一个名为default的分支(这是标准分支)和另一个名为default / master的分支(我认为由于远程仓库实际上是git)。汞更新默认/主; hg commit --close-branch; 汞更新默认为我工作。 (2认同)

Nic*_*int 67

我知道你不想在这个阶段与分支机构合作,但这正是你所做的.当你回到早期版本并提交一些有效的东西时,你创建了一个分支 - 一个未命名的分支,但是一个分支都是一样的.


没有问题,只是像你一样继续而不担心多头,但如果你想整理一下所以你不小心选错了头,那么你可以杀死旧的分支.

Mercurial文档中有一个很好的部分,它带您了解Pruning Dead Branches的许多选项.

我认为最好的选择是将旧分支标记为"已关闭".如果你的老头是修订版"123"那么:

hg update -r 123
hg commit --close-branch -m 'Closing old branch'
hg update -C default
Run Code Online (Sandbox Code Playgroud)

  • nial的答案不包括必需的命令 (8认同)
  • 大声笑它是相反的!mercurial的术语选择听起来对svn用户来说是自然的,而git的一个令人困惑的地狱!无论如何,赞成这个答案,因为它包括最后一次更新-C (8认同)
  • Blurgh - 我进入后刚看到@Niall的回答.将上升的Niall和我的可以在零点池中萎缩.:) (3认同)
  • 为什么在`hg update`中需要`-C`?似乎没有文件会被修改,因此没有它就可以工作。 (2认同)

Art*_*yan 21

首先,输入:

hg heads
Run Code Online (Sandbox Code Playgroud)

想象一下,你有三个头:

changeset:   223:d1c3deae6297
user:        Your name  <your@email.com>
date:        Mon Jun 09 02:24:23 2014 +0200
summary:     commit description #3

changeset:   123:91c5402959z3
user:        Your name <your@email.com>
date:        Sat Dec 23 16:05:38 2013 +0200
summary:     commit description #2

changeset:   59:81b9804156a8
user:        Your name <your@email.com>
date:        Sat Sep 14 13:14:40 2013 +0200
summary:     commit description #1
Run Code Online (Sandbox Code Playgroud)

比方说,你想让最后一个头保持活跃状态​​(223)并关闭其余部分.

然后你会这样做:

关闭头#59

hg up -r 59
hg ci --close-branch -m "clean up heads; approach abandoned"
Run Code Online (Sandbox Code Playgroud)

关闭头#123

hg up -r 123
hg ci --close-branch -m "clean up heads; approach abandoned"
Run Code Online (Sandbox Code Playgroud)

提交更改

hg push
Run Code Online (Sandbox Code Playgroud)

不要忘记在最后切换到右头

hg up -r 223
Run Code Online (Sandbox Code Playgroud)

而且你已经完成了.

  • 此外,除了您的工作副本仍在您刚刚关闭的头部之外,您最后还是完成了.在封闭的头上发生另一次改变,重新打开它.在进行任何更改之前,您需要"hg up -r 223". (5认同)

msa*_*het 12

你想用hg backout.这将从任何子变更集中删除变更集所做的更改.

检查一下这是一个很好的解释. Mercurial Backout

  • 我实际上不同意 - 放弃一个人的工作并从一个良好的起点开始似乎比使用退出更清晰的工作模式.特别是因为您无法一次退出多个变更集. (7认同)
  • 这是正确的答案.回退添加变更集的反转,撤消工作并给出提交消息,以提醒自己为什么不喜欢这个想法. (2认同)
  • @Martin Geisler是的,我全力以赴,只是有时会给坏的变化带来麻烦,这是最好的 (2认同)