2010-11-30 10 views
6

私は1つのブランチに多くのファイルを大量にコミットしています。そのチェンジセット内の1つのファイルの変更を別のブランチに転送する必要があります。これどうやってするの?私は主にTortoiseHgを使用していますが、コマンドラインソリューションも問題ありません。Mercurialでは、1つのファイルの変更をチェンジセットから抽出して別のブランチに適用するにはどうすればよいですか?

私がTortoiseHgのチェンジセットに行ってファイルを選択すると、私は転送したい差分を見ることができますが、実際にそれらを適用する方法はありません。

$ 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...>" 

欠点:

答えて

8

あなたが使用してちょうどそのファイル用のパッチを入手することができます

あなたが行って、あなたが好きな枝にインポートすることができます
hg log -r THEREVISIONWITHLOTSOFCHANGES -p -I path/to/justthatfile > justthatfile.patch 

hg update anotherbranch 
hg import --no-commit justthatfile.patch 
hg commit 
2

最も基本的な解決策は、ファイルのパッチをダンプ現在の作業リビジョンにそれを適用し、それをコミットすることです(あなたがリポジトリのルートにいると仮定した場合)あなたが更新履歴の観点から行ったことはあまり明白ではないということです。良いコミットメッセージが役立ちますが、履歴グラフはいくつかの変更を移植するプロセスについてのヒントを提供しません。その場合、マージと復帰することは、より良い解決策になることがあります。

$ 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>" 

おそらくこれを行うにはより多くのソリューションがあります - これら二つは、最初に私の頭に浮かびました。

関連する問題