読者です 読者をやめる 読者になる 読者になる

特定ファイルの変更があるコミットだけをcherry-pick

まず以下のコマンドで現在までの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