mercurial - 是否有等效于 `git stash save -p` 的 hg 可以将 block 分成更小的 block ?

标签 mercurial tortoisehg

我只想提交我对我的文件所做的一些修改,我首选的方法是搁置/隐藏我不想提交的更改。这允许我在实际提交之前测试我将提交的更改。

我遇到的问题是,当我在 tortoisehg 中使用“搁置”工具时,我找不到任何方法将一个块分成两个更小的块。例如,我有一个看起来像这样的块:

@@ -1,1 +1,2 @@
-hallo world
+hello world
+something else

我想搁置“别的东西”,这样我就可以只提交“hallo->hello”修复。但是,由于 tortoisehg 将其视为单个块,因此我可以搁置这两个更改,也可以不搁置任何更改。

我还尝试通过命令行使用搁置扩展,但根据我从文档中的理解,它不提供仅搁置部分文件的功能。

最佳答案

您可以从命令行完成您的目标。 hg commit有互动版本, hg revert , 和 hg shelve ,如果需要,他们有低级选项可以一起破解补丁;您可以通过 -i 使用它们(或 --interactive )命令行选项。

这意味着您可以使用 hg commit -i 建立一个提交。和 hg commit --amend -i .如果你安装了进化扩展,你可以使用 hg uncommit再次从提交中提取更改;如果没有,您可以使用 hg revert -r .~1hg revert -i -r .~1一个文件并使用 hg commit --amend -i再次修复它。

为了从补丁中选择单独的行,您有两个选择。您可以使用 e编辑补丁(但请参阅下面的更方便的选项)。

然后您可以使用 hg shelve搁置剩余的更改。

原则上您也可以使用 hg shelve -i 来做到这一点。但是,有一个很大的警告;如果您编辑 hg shelve -i 的补丁,那么 Mercurial 的 merge 机制会变得困惑,并且不会干净地处理更改,而是将您转储到 merge 工具中以解决这个明显的冲突(这意味着需要大量额外的工作来解决它)。因此我强烈推荐使用 hg commit -ihg commit --amend -i如果您想在行级别操作(hg shelve -i 如果您不编辑补丁可以正常工作)。

为了更加方便(防止您编辑补丁),您还可以通过将以下内容添加到您的 hgrc 来启用实验记录选项。文件:

[experimental]
crecord = true

这将为 hg commit -i 启用基于终端的大块编辑器, hg revert -i , 和 hg shelve -i它允许您选择单独的线条和大块(在内部,其工作方式与编辑补丁大致相同)。使用 ?在该编辑器中获得帮助的关键;使用 f展开/折叠单个大块,空格键选择大块/线条。

请注意,此工具的基于行的选择与 hg shelve -i 一起使用带有与编辑补丁相同的警告;即使用 hg commit -ihg commit --amend -i相反,如果您想进行基于行的选择。此外,基于行的选择 hg revert -i仍然会还原整个大块头。 (此选项仍被标记为实验性是有原因的。)

关于mercurial - 是否有等效于 `git stash save -p` 的 hg 可以将 block 分成更小的 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33595826/

相关文章:

linux - Mercurial 忽略 LInux 上的创建/修改日期更改

version-control - 不能忽略 Mercurial Commit (TortoiseHG) 中的文件

TortoiseHg Workbench : where, 哦在哪里,是修订历史 View 吗?

Windows 版乌龟Hg : How to push to Google Code?

mercurial - Bitbucket/Mercurial/Tortoise 如何将文件夹添加到 Bitbucket 存储库?

SVN:模拟 hg 的 addremove

git - 用于备份的私有(private) mercurial/git 分支?

mercurial - 有什么方法可以告诉 mercurial 该文件已更改名称?

mercurial - 是否可以从 Mercurial (HG) 存储库中 checkout 单个目录?

mercurial - 如何监控中央 Mercurial 存储库的 "check-in/push-es"?