我在一个分支上有很多文件的大量提交,我需要将该变量集中单个文件的修改转移到另一个分支。我怎样才能做到这一点?我主要使用TortoiseHg,但命令行解决方案也很好。
如果我转到TortoiseHg中的变更集并选择文件,我可以看到我要传输的差异,但不能实际应用它们。
答案 0 :(得分:9)
您可以使用以下命令获取该文件的补丁:
hg log -r THEREVISIONWITHLOTSOFCHANGES -p -I path/to/justthatfile > justthatfile.patch
然后你可以在你想要的任何分支上导入:
hg update anotherbranch
hg import --no-commit justthatfile.patch
hg commit
答案 1 :(得分:2)
最基本的解决方案是转储文件的补丁,将其应用到当前工作版本并提交它(假设您位于存储库的根目录下):
$ hg up <revision-to-apply-the-patch-to>
$ hg diff -c <revision-containing-the-patch> <files-to-include> | patch -p0
$ hg ci -m "Transplanting selected changes from <revision-contain...>"
这种方法的缺点是,从修订历史角度来看,你所做的并不是很明显。一个好的提交消息在这里有帮助,但历史图表没有提示移植某些更改的过程。在这种情况下,合并和还原可能是一个更好的解决方案:
$ hg up <revision-to-apply-the-patch-to>
$ hg merge -r <revision-containing-the-patch>
$ hg revert --no-backup <files-to-exclude>
$ hg ci -m "Merge in changes of <files-to-include>"
可能还有更多的解决方案可以做到这一点 - 我首先想到了这两个。