我刚刚从他们的遥控器克隆了一个仓库。
我构建了软件,更改了大约 4 个文件,在本地提交了它们,现在想创建一个可以显示它们的补丁。
当我运行时:
hg diff -U8p abc efg pqr > patch_file
我没有看到我所做的更改。是否hg diff
仅将当前文件与最后提交的文件进行比较?
我怎样才能让它工作?
到diff
针对特定修订的工作目录REV
,使用
hg diff -r REV
要相互比较两个修订版,请使用
hg diff -r REV1 -r REV2
要确定要比较哪些修订,请检查hg log
. 如果您经常这样做并且基本修订版已修复,请给它一个名称(例如whatipulled)
hg tag -r REV whatipulled
然后,您可以指定whatipulled
修订版本,而不是数字 rev id(或散列)。
要以更丰富的格式导出您的差异,包括提交评论等,您还可以使用为此目的设计的以下内容:
hg export -r REV
还有hg bundle -r REV
,它会生成一个包含类似信息的二进制文件。
但是,如果您要将更改发送回父 repo,最好的方法是使用hg push
. 它将您的变更集直接传达给父级;您甚至不需要知道哪些变更集需要推送。当然,您必须有权推送到父 repo。
hg push [ parent_repo_url ]
(如果您从中拉出,则 mercurial 应该已经知道路径,您可以将其排除在外)。
如果父 repo 在 bitbucket 上而您没有 pu,则可以在 bitbucket 上设置自己的帐户,从本地 repo 拉/推到该帐户,然后向项目 repo 发出“拉取请求”,询问他们从你身上拉扯。
以上所有选项都有控制其行为的选项,请参阅。
从hg help diff
如果仅指定了一个修订版,则将该修订版与工作目录进行比较
在您的 -r 差异中,您必须在差异之前使用旧提示(最新的“不是您的”变更集)并更新为提示(您的最新变更集)。
如果在您的变更集中修改了某些二进制数据,请不要忘记使用 -g 选项
hg up & hg diff -r <CSET> -g > some.patch
改进了任何活动变更集的差异,无需手动检测基本变更集(对于线性历史 == 在单个分支中)
hg diff -r "parent(min(outgoing()))" -r tip
默认情况下,hg diff
将当前签出的文件与上次提交进行比较。您可以通过添加选项来更改它:
-r REV
将当前签出的文件与特定修订进行比较REV
。-c REV
显示修订所做的更改REV
所以在你的情况下hg diff -c 123 ...
会给你提交 123 的差异。
我的猜测是这hg outgoing
正是您想要的——它将您在本地提交的内容与默认远程服务器上的内容进行比较,并向您显示这些变更集或-p
提交的列表。
但是,这确实会分别显示每个变更集。如果您想查看所有更改的组合,您必须这样做,hg diff -r HERE -r THERE
或者因为-r HERE
这是默认设置,hg diff -r THERE
我看到你在评论中问过“我怎么知道那里有什么”,那里有最后一个变更集遥控器,你可以通过hg outgoing
. 如果hg outgoing
显示它会发送变更集 66、67 和 68,那么您需要将hg diff -r 65
已经存在的内容 (65) 与本地的内容 (68) 进行比较。