まず以下のコマンドで現在までのhoge.txtの変更だけを取り出して見ることができる。
$ git log -- hoge.txt
また、以下のようにすることでコミット間の変更を取り出すことができる。
$ git log <sha1>..<sha1> or $ git log branchA..branchB
なのでこれらを組み合わせれば指定したコミット間で特定ファイルの変更があったコミットだけを抜き出せる。
$ git log <sha1>..<sha1> -- hoge.txt
cherry-pickの際はsha1だけ必要なのでgit logではなくgit rev-listを使う。
また、古いものから適用するために逆順に並べる。
$ git rev-list --reverse <sha1>..<sha1> -- hoge.txt
あとはこれをcherry-pickすればよい。
$ git rev-list --reverse <sha1>..<sha1> -- hoge.txt | xargs git cherry-pick --stdin
マージコミットが要らなければ--no-mergeも付ける。
conflictしたらrebase時と同じようにしていけばよい。
$ edit conflcted_file $ git add conflcted_file $ git cherry-pick --continue