В Mercurial как извлечь изменения одного файла из набора изменений, чтобы применить их к другой ветви?
У меня есть большая фиксация многих файлов в одной ветви, мне нужно перенести изменения одного файла в этом наборе изменений в другую ветвь. Как я могу это сделать? Я в основном использую TortoiseHg, но решения командной строки также хороши.
Если я перейду к набору изменений в TortoiseHg и выберу файл, я смогу увидеть различия, которые я хочу передать, но не способ их реального применения.
2 ответа:
Вы можете получить патч только для этого файла, используя:
hg log -r THEREVISIONWITHLOTSOFCHANGES -p -I path/to/justthatfile > justthatfile.patch
Которые затем можно импортировать в любую ветвь, сделав следующее:
hg update anotherbranch hg import --no-commit justthatfile.patch hg commit
Самое простое решение-сбросить патч файла, применить его к текущей рабочей ревизии и зафиксировать его (предполагая, что вы находитесь в корне репозитория):
Недостатком этого метода является то, что не очень очевидно, что вы сделали с точки зрения истории изменений. Здесь помогает хорошее сообщение о фиксации, но график истории не дает никакого намека на процесс переноса некоторых изменений. В этом случае слияние и возврат могут быть лучше решение:$ 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>"