这个问题已经有一个答案在这里:

我目前正在使用TortoiseHg(善变的),不小心犯的一个错误的承诺信息。我如何去关于编辑此提交信息的存储库?

有帮助吗?

解决方案

更新: 善变的有加入 --amend 这应该是 优先选择现在.


你可以回滚最后一次提交(但只有最后一)与 hg rollback 然后重新应用它。

重要:此 永久除掉的最新承诺 (或拉).所以如果你已经做了 hg update 这一承诺不再是你的工作目录然后就一去不复返了。 所以复制的第一个。

其他比,你不能改变的储存库的历史(包括提交信息),因为在那里的一切是检查-总结。你唯一能做的是修剪的历史之后给出变更,然后重新创建它。

这一切都不会工作如果你已经发表了你的改变(除非你可以掌握的所有副本),而你也不能"重写历史记录",包括全球公益物签署的承诺(由其他人)。

其他提示

嗯,我用来做这样的:

想象一下,你有500承诺,和你错误的提交消息是在r.498.

hg qimport -r 498:tip
hg qpop -a
joe .hg/patches/498.diff
(change the comment, after the mercurial header)
hg qpush -a
hg qdelete -r qbase:qtip

好消息:汞2.2 刚刚加入 git喜欢 --amend 选项。

在tortoiseHg,可以使用"修改目前的修订",由选择黑色的箭头上的权利的承诺按钮

a

我知道这是一个古老的职位和标记问题作了回答。我是在寻找同样的东西最近,我发现的 histedit 扩展非常有用的。该进程是在这里解释说:

http://knowledgestockpile.blogspot.com/2010/12/changing-commit-message-of-revision-in.html

最后一个操作的承诺问题

改变提交信息的最近一次提交时的最后一个善变的行动是为了犯下可以使用

$ hg rollback

滚回的最后一次提交的和重新提交其与新的信息:

$ hg ci -m 'new message'

但是要小心,因为rollback命令还回滚下列行动:

  • 进口
    • 推动(与此储存库的目的地)
    • 分拆

(见 hg help rollback)

因此,如果不确定如果最后一个善变的命令是 hg ci, ,不要使用 hg rollback.

改变任何其他提交消息

你可以使用 mq扩展, ,这是发布的善变,改变提交信息的任何提交。

这种方法是,只有当没有已经克隆的储存库,在公共包含的变更要重新命名,因为这样做改变了变更集中的散列的和以下所有变更集。

这意味着你必须要能够消除所有现有的克隆,包括变更集你想要重新命名,或其他推/拉之间他们不会的工作。

使用mq扩你必须明确使它能,例如在UNIX检查你的 ~/.hgrc, ,其中应包含如下:

[extensions]
mq=

说你想要的变化修订X-第一 qimport 进口的修订X及以下。现在他们都是注册为一堆应用的增补程序。弹(qpop)的完整堆除了X使X可通过改变 qrefresh.后提交信息是变化的推进所有贴次(qpop)重新应用它们,即重新创建的以下修订。堆的增补程序不需要任,因此它可以通过删除 qfinish.

下列演示脚本说明所有业务行动。在例提交信息的第三个变更是重新命名。

# test.sh
set -x -e -u
echo INFO: Delete old stuff
rm -rf .hg `seq 5`
echo INFO: Setup repository with 5 revisions
hg init
echo '[ui]' > .hg/hgrc
echo 'username=Joe User <juser@example.org>' >> .hg/hgrc
echo 'style = compact' >> .hg/hgrc
for i in `seq 5`; do
  touch $i && hg add $i && hg ci -m "changeset message $i" $i
done
hg log 
echo INFO: Need to rename the commit message or the 3rd revision
echo INFO: Displays all patches
hg qseries
echo INFO: Import all revisions including the 3rd to the last one as patches
hg qimport -r 2:tip
hg qseries
echo INFO: Pop patches
hg qpop 2.diff
hg qseries
hg log 
hg parent
hg qrefresh -m 'CHANGED MESSAGE'
hg log 
echo INFO: Push all remaining patches
hg qpush -a
hg log 
hg qseries
echo INFO: Remove all patches
hg qfinish -a
hg qseries && hg log && hg parent

复制到一个空的目录执行它如通过:

$ bash test.sh 2>&1 | tee log

输出应包括原来的变更集的信息:

+ hg log
[..]
2   53bc13f21b04   2011-08-31 17:26 +0200   juser
  changeset message 3

并重新命名操作的改变的信息:

+ hg log
[..]
2   3ff8a832d057   2011-08-31 17:26 +0200   juser
  CHANGED MESSAGE

(测试与善变的1.7.5)

在TortoiseHg,右击的修订要修改。选择修改的历史->的进MQ。会转换的所有修订,包括选修订从善变的变更集成水银队列修补程序。选择贴要修改的消息,并且它应当自动改变屏幕要MQ编辑器。编辑信息,这是在屏幕中间,然后点击QRefresh.最后,右击贴和选择修改的历史-->完成贴,将它从一个补丁回到一个改变设置。

哦,这个假定MQ是一个活跃扩展TortoiseHG在这一储存库。如果不,你应该能够击文件>设置"、"扩展,并点击mq选项。它应该警告你,你必须接近TortoiseHg前扩展的活动,所以关闭并重新开放。

正如其他人已经提到的MQ扩展是更适合这个任务,并且你不能毁坏你的工作。要做到这一点:

  1. 使MQ扩展,通过增加像这样的东西你hgrc:
    [extensions]
    mq =
    
  2. 更新的变更要编辑,通常提示:
    hg up <rev>
    
  3. 进口的当前变更集到的队列:
    hg qimport -r .
    
  4. 刷新的补丁和编辑所提交信息:
    hg qrefresh -e
    
  5. 完成所有适用的补丁(一个,在这种情况下)并将它们存储为经常变更集:
    hg qfinish -a
    

我不熟悉TortoiseHg,但该命令应类似于那些上面。我还认为值得一提的是,编辑历史的危险;你应该只做到这一点,如果你 绝对 某些变更集中没有被推迟或从其他地方。

Rollback和重新申请是真简单的解决方案,但它可以帮助只有最后提交。善变的队列是更强大的东西(注意,你需要 使刺客排队扩展 为了使用"的汞q*"命令)。

我没有这种方式。首先,不要把你的变化或者你的运气了。抓住并安装的 崩溃 扩展。提交的另一虚拟变更集。然后使用的崩溃,以结合前面两个变更集成为一体。它将提示你一个新的提交信息,给你的消息,你已经作为一个起点。你已经有效地改变你原来的提交信息。

一个破解我的使用,如果修订,我想要编辑不是那么老

让我们说你在转500你要编辑497.

hg export -o rev497 497
hg export -o rev498 498
hg export -o rev499 499
hg export -o rev500 500

编辑rev497文件和变化的信息。(这是后的第一线之前"#")

hg import rev497
hg import rev498
hg import rev499
hg import rev500

还有另一种方法的扩展和MQ 调试命令.这是一个普遍的方式来修改历史,而不会丢失数据。让我假设相同的情况 安东尼奥.

// set current tip to rev 497
hg debugsetparents 497
hg debugrebuildstate
// hg add/remove if needed
hg commit
hg strip [-n] 498

一个小宝石在上述讨论-谢谢@Codest和@凯文*普林.在TortoiseHg,有一个拉的选择邻接犯下按钮。选择"修改当前修订"带回的意见和列表的文件。那么有用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top