因此创建了一个新的分支,我们对代码库进行了一些重大更改。
现在我们要合并,但在此之前我想获得分支中已更改的所有文件的列表。
如何获取文件列表?我试过了:
hg status --change REV
但我不确定这是否是我想要的,因为我希望在此分支中更改所有文件而不是分支中的特定修订。
BTW,如何查看修订号?
答案 0 :(得分:8)
尝试
$ hg status --rev "branch('your-branch')"
获取分支上第一个和最后一个变更集之间的更改(hg status
将隐式使用min(branch('your-branch'))
和max(branch('your-branch'))
,当您为其提供一系列此类修订时。< / p>
由于你要合并,你应该真正看看
$ hg status --rev default:your-branch
查看 default
分支与your-branch
之间的更改内容。这将向您显示已完成的修改,并筛选出由于与default
合并而在分支上完成的任何修改。
如果你的历史记录是这样的话,这是必要的:
your-branch: x --- o --- o --- o --- o --- o --- y
/ / /
default: o --- a --- o --- b --- o --- c --- o --- o --- d
您已经将default
合并到您的分支机构中几次。将default
合并到您的分支中是正常的,因为您希望定期整合来自该分支的最新内容,以避免分支相互偏离太远。
但如果default
上引入了新文件,之后合并到B
,那么您并不想在hg status
输出中看到该文件。如果你这样做,你会看到它
$ hg status --rev a:y
因为该文件不在a
中,但存在于y
中。如果你这样做
$ hg status --rev d:y
然后你不会在输出中看到该文件,假设它存在于两个脑袋中。
您在评论中写道,您正在使用 Kiln 存储库。他们的意思是&#34;克隆&#34;当他们说&#34;分支&#34;,但上述仍然可以适应你的情况。所有更改集都位于default
named branch,但没关系。
在&#34;分支&#34;的本地克隆中运行以下命令存储库:
$ hg bookmark -r tip mybranch
这标志着当前的提示是mybranch
的头部。然后从主存储库中提取所有变更集:
$ hg pull https://you.kilnhg.com/Repo/public/Group/Main
然后将 new 提示标记为主存储库的提示:
$ hg bookmark -r tip main
您现在可以运行
$ hg status --rev main:mybranch
查看main
和my-branch
之间的更改。如果你想看看你在分支上做了什么,使用
$ hg status --rev "::mybranch - ::main"
::mybranch
部分将选择作为mybranch
祖先的变更集 - 这是您的所有新作品,加上您分支之前的旧历史记录。我们使用- ::main
删除旧历史记录。在旧版本的Mercurial中,您可以使用hg log -r -r mybranch:0 -P main
。
答案 1 :(得分:0)
在这种情况下,我更喜欢从新签出的repo副本进行测试合并。这样做的好处是我可以看到合并会产生多少冲突,并且我可以保留合并结果,因为我是在自己的副本中完成的。
答案 2 :(得分:0)
要查看修订号,请启用graphlog extension并运行:
$ hg log -b your-branch -G
这为您提供了一个很好的ASCII图形。这可以很方便地快速查看图表,但我建议将TortoiseHg用于跨平台日志查看器:
答案 3 :(得分:0)
我不得不将默认分支合并到我的分支中以获得一些修复,现在上面的命令也显示由于合并而更改的文件(这些文件在默认分支中再次合并后更改)。
因此,为了获得正确的文件我使用这样的东西:
hg log --rev "branch('my-branch') and not merge()" --template '{files}\n' | sed -e 's/ /\n/g' | sort -u
如果文件名中有空格,可以这样做:
hg log --rev "branch('my-branch') and not merge()" --template '{rev}\0' | xargs -0 -I @ hg status -n --change @ | sort -u
要回答您的上一个问题,可以通过以下方式显示修订:
hg log --rev "branch('my-branch') and not merge()" --template '{rev}\n'
提示:我为此使用了hg-alias:
[alias]
_lf = ! $HG log --rev "branch(\"$1\") and not merge()" --template '{rev}\0' | xargs -0 -I @ hg status -n --change @ | sort -u
答案 4 :(得分:0)
使用 mercurial ,如果您想获取当前分支中更改的所有文件的列表(更改集的更改已完成),您可以使用以下命令:
hg log --branch $(hg branch) --stat | grep '|' | awk -F\ '{printf ("%s\n", $1)}' | sort -u
示例结果:
api/tests/test_my_app.py
docker/run.sh
api/my_app.py
命令说明:
hg log --branch $(hg branch) --stat
显示整个存储库或文件的修订历史记录,并输出diffstat样式的更改摘要
hg branch
显示当前分支名称
grep '|'
搜索文本模式,在这种情况下,它是“|”
awk -F\ '{printf ("%s\n", $1)}'
空格分隔符表示记录中的每个字段,并在新行中打印每个字段
sort -u
对所有打印行进行排序并删除重复项