处理这种情况的最佳方法是什么?“哎呀,我忘记在上次签到时包含几个文件”。. . ? 而不是用评论“糟糕,忘记这些文件”来跟进它。. . ?
2 回答
如果错误的提交已经被推送或拉到任何地方,则不应使用这些;他们重写历史并且在发布重写的提交时会引起问题。
这两种解决方案都假设您没有进行任何干预提交。
取决于您是否正在运行足够新的 Mercurial 版本:
hg add <missing files>
hg commit --amend
我不确定它是在哪个版本中引入的,顺便说一句。
替代amend
方案是rollback
:
hg rollback
hg add <missing files>
hg commit
如果使用 mercurial 2.2 或更高版本,您可能应该使用 amend 标志hg commit --amend
。从帮助:
--amend 标志可用于使用新提交修改工作目录的父级,该提交包含父级中的更改,以及当前由 hg status 报告的更改(如果有的话)。旧的提交存储在 .hg/strip-backup 的备份包中(参见 hg help bundle 和 hg help unbundle 了解如何恢复它)。
否则,您可以使用回滚(不推荐,因为您正在重写历史记录)hg rollback
:
应谨慎使用此命令。只有一级回滚,没有办法撤消回滚。它还将恢复上次事务时的 dirstate,丢失自那时以来的任何 dirstate 更改。此命令不会更改工作目录。
或使用hg backout
:
在当前工作目录中准备一个具有 REV 撤消效果的新变更集。如果 REV 是工作目录的父目录,那么这个新的变更集会自动提交。否则, hg 需要合并更改并且合并的结果未提交。