Git で過去の特定のコミットの中の特定のファイルの変更を現在のワークツリーにマージする

Git で過去の別ブランチの特定のコミットの中の特定のファイルの変更を現在のワークツリーにマージする

結構レアなケースだと思うのですが、今日そういうシーンに遭遇したのでメモとして残しておきます。

今日のケース

今日発生したケースは、

  1. develop ブランチからトピックブランチを切ってAファイルとBファイルを修正(コミットZとする)
  2. そのまま develop にマージすることなく放置
  3. develop ブランチには他のトピックブランチの修正がいくつもマージされていった
  4. 1 のトピックブランチを develop にマージしようと思ったがAファイルのコンフリクトがひどくてマージが大変

という状況で、じゃあ現在の develop ブランチから改めてトピックブランチを切って、そこに B ファイルの修正だけマージしよう、となったわけです。Aファイルの修正は特に必要がなくなったので。

コマンド

これを解決するには、まずは develop から新たにトピックブランチを切ってチェックアウトします。

そして、以下のコマンドで解決です。

git checkout <コミットZのハッシュ> -- <Bファイルのファイルパス>

相変わらず Git はよくできてるなぁと思った瞬間でした。

Published 2024-02-13
Updated 2024-02-13