在本地提交之后的差异

时间:2013-02-24 12:12:57

标签: mercurial diff commit

我刚从他们的遥控器克隆了一个回购。

我构建了该软件,在本地更改了大约4个文件,已提交,现在想要创建一个可以显示它们的补丁。

当我跑步时:

hg diff -U8p abc efg pqr > patch_file

我没有看到我所做的改变。 hg diff仅将当前文件与上次提交的文件进行比较吗?

如何让它发挥作用?

4 个答案:

答案 0 :(得分:3)

  1. 针对特定修订diff的{​​{1}}工作目录,请使用

    REV
  2. 要比较两个修订版,请使用

    hg diff -r REV 
    
  3. 要确定要比较的修订版本,请检查hg diff -r REV1 -r REV2 的输出。如果您要做很​​多事情并修复基本修订版,请使用

    为其命名(例如 whatipulled
    hg log

    然后,您可以指定hg tag -r REV whatipulled 作为修订,而不是数字rev id(或哈希)。

  4. 要以更丰富的格式导出差异,包括提交评论等,您还可以使用为此目的而设计的以下内容:

    whatipulled
  5. 还有hg export -r REV ,它会生成一个包含类似信息的二进制文件。

  6. 但是如果您要将更改发送回父回购,最好的方法是使用hg bundle -r REV。它将您的变更集直接传达给父级;你甚至不需要知道哪些变更集需要推动。当然,您必须有权推送到父级回购。

    hg push

    (如果你从中取出,mercurial应该已经知道路径了,你可以把它留下来。)

  7. 如果父级仓库位于bitbucket且您没有pu,则可以在bitbucket上设置自己的帐户,从本地仓库中拉出/推送到该仓库,然后发出“拉取请求”项目回购,要求他们拉你。

  8. 以上所有都有控制行为的选项,见。

答案 1 :(得分:2)

来自hg help diff

  

如果只指定了一个修订版,则将该修订版与工作目录

进行比较

在你的差异-r中你必须使用旧的提示(最新的“不是你的”变更集)并在变异之前更新到提示(你的最新变更集)。

如果您的变更集中修改了某些二进制数据,请不要忘记使用-g选项

hg up & hg diff -r <CSET> -g > some.patch

改进了任何活动变更集的差异,无需手工检测基础变更集(对于单个分支中的线性历史==)

hg diff -r "parent(min(outgoing()))" -r tip

答案 2 :(得分:1)

默认情况下,hg diff会将当前签出的文件与上次提交进行比较。您可以通过添加选项来更改此选项:

  • -r REV将当前签出的文件与特定版本REV进行比较。
  • -c REV显示修订版REV
  • 所做的更改

因此,在您的情况下,hg diff -c 123 ...会为您提供提交123的差异。

答案 3 :(得分:1)

我的猜测是hg outgoing正是您想要的 - 它将您在本地提交的内容与默认远程服务器上的内容进行比较,并显示这些更改集的列表或-p提交。

但是,这确实分别显示了每个变更集。如果您希望结合所有更改,则必须执行hg diff -r HERE -r THERE-r HERE是默认设置,hg diff -r THERE

我看到你在评论中询问“我怎么知道它有什么”,其中 THERE 是遥控器的最后一个变更集,你可以通过{{1}来得到答案}。如果hg outgoing显示它会发送更改集66,67和68,那么您希望hg outgoing将已存在的内容(65)与本地内容(68)进行比较。