因此,我们创建了一个新分支,我们在其中对代码库进行了一些重大更改。
现在我们要合并,但在此之前我想获取分支中所有已更改文件的列表。
如何获取文件列表?我试过:
hg status --change REV
但我不确定这是否是我想要的,因为我希望在这个分支中更改所有文件,而不是分支中的特定修订。
顺便说一句,我如何查看修订号?
尝试
$ hg status --rev "branch('your-branch')"
获取分支上第一个和最后一个变更集之间的更改(hg status
将隐式使用min(branch('your-branch'))
并且max(branch('your-branch'))
当你给它一个这样的修订范围时)。
既然你要合并,你真的应该看看
$ 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存储库。当他们说“分支”时,他们的意思是“克隆”,但上述内容仍然可以根据您的情况进行调整。所有变更集都将位于default
命名的分支上,但这没关系。
在“分支”存储库的本地克隆中运行以下命令:
$ hg bookmark -r tip mybranch
这将当前提示标记为 的头部mybranch
。然后从主存储库中提取所有变更集:
$ hg pull https://you.kilnhg.com/Repo/public/Group/Main
然后将新提示标记为主存储库的提示:
$ 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
.
在这种情况下,我更喜欢从新签出的 repo 副本中进行测试合并。这样做的好处是我可以看到合并会产生多少冲突,并且我可以保留合并结果,因为我是在自己的副本中完成的。
要查看修订号,请启用graphlog 扩展并运行:
$ hg log -b your-branch -G
这为您提供了一个漂亮的 ASCII 图形。这可以方便快速查看图表,但我建议使用TortoiseHg作为跨平台日志查看器:
我不得不将默认分支合并到我的分支中以获得一些修复,现在上面的命令还显示了由于合并而更改的文件(此文件在默认分支中再次合并后更改)。
因此,为了只获取正确的文件,我使用如下内容:
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]
_lf = ! $HG log --rev "branch(\"$1\") and not merge()" --template '{rev}\0' | xargs -0 -I @ hg status -n --change @ | sort -u
使用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
对所有打印行进行排序并删除重复项