使用 mercurial 时,在进行大的更改时,我会进行多次提交(作为安全点,或与同事分享我的进度)。完成后,我想将我的更改推送到主存储库中。不过,在我这样做之前,我会想做一个“hg pull -u && hg merge”来获取自上次拉取以来发生的更改,并查看我的更改。
因为我有几个变更集,所以在每个变更集上运行 hg diff 并不是一个好的解决方案。
我尝试运行 hg diff -c"outgoing() 而不是 merge()" 以仅显示我传出变更集的差异(没有合并变更集,因为这往往只会增加我想要避免的噪音)。
但是,对我来说仍然不行,因为 mercurial 似乎跳过了一些信息,我不明白是基于什么。请参考以下场景:
完整场景:
# clean working directory
rm -fr base clone
#prepare reference repo
mkdir base; cd base
hg init
touch 1.txt
echo " 1\n2" >>1.txt
hg add 1.txt
touch 2.txt
hg add 2.txt
hg commit -m"initial commit"
cd ..
hg clone base clone
cd base
#update ref repo.
echo "foo" >> 1.txt
hg commit -m"update file on remote repository"
#make changes locally
cd ../clone
echo "foo" >> 2.txt
hg commit -m "update initial file"
#now we are ready to push
hg pull -u && hg merge
hg commit -m"merge"
#actually...
sed -i -e 's/foo/bar/' 2.txt
hg commit -m"changed my mind"
hg out
changeset: 1:fce14ac089b2
date: Thu Nov 14 11:17:08 2013 +0100
summary: update initial file
changeset: 3:1967c50242c0
parent: 1:fce14ac089b2
parent: 2:2cdaf75afc6d
date: Thu Nov 14 11:17:10 2013 +0100
summary: merge
changeset: 4:120a0b8a0ede
tag: tip
date: Thu Nov 14 11:18:54 2013 +0100
summary: changed my mind
#try to display my changes
hg diff -c"outgoing() and not merge()"
--- a/2.txt Thu Nov 14 11:17:10 2013 +0100
+++ b/2.txt Thu Nov 14 11:18:54 2013 +0100
@@ -1,1 +1,1 @@
-foo
+bar
#only one change here!
#but
hg log -r"outgoing() and not merge()"
changeset: 1:fce14ac089b2
date: Thu Nov 14 11:17:08 2013 +0100
summary: update initial file
changeset: 4:120a0b8a0ede
tag: tip
date: Thu Nov 14 11:18:54 2013 +0100
summary: changed my mind
#is ok
那么,任何人都可以向我解释为什么 mercurial 会完全跳过变更集 fce14ac089b2 吗?我期望的是一个合并的输出,即:
--- a/2.txt
+++ b/2.txt
@@ -1,1 +1,1 @@
+bar
提前非常感谢。