我在Mercurial工作,最近我将一些变更集推送到了存储库。另一个人合并推了他们的东西。
此时我的一个文件在合并过程中丢失了编辑内容。我回溯跟踪文件以查看删除代码的位置,但我找不到任何明确删除行的情况。
有谁知道这里发生了什么?我看了,我上面的1个变更集不包含代码。这是一个合并变革集。
答案 0 :(得分:4)
没有提交的代码行永远丢失。
合并只是一个包含两个父项的提交 - 合并可以包含或删除任何一个父代的任何代码。
棘手的部分是,用于查看代码可能被删除的常规命令(例如hg log -p
)将变更集与其左父变量进行比较,因此您只能使用查看相对于该父母的补充和删除。
例如,如果历史记录如下:
[A]--[B]--[D]
\ /
-[C]-
(其中A是B和C的父亲,D有两个父母B和C)
如果您在B中添加了更改,但是D的左父级是C而D的右侧父级是B,那么当您运行hg log -p
以查看补丁时你看到了:
这些都不会显示删除您的更改。要看到你需要D而不是B,你可以得到:
hg diff -r B -r D
所以合并的人抛出了你的代码,你可以挖掘一下来进行证明。