とあるファイルを過去の変更コミット前に戻す

checkoutコマンドを使います。以下は使用例です。

git checkout 4d1c4e4~1 -- <file_path>

4d1c4e4時の変更にこのファイルの変更が含まれています。含まれているのでここに戻っても変更直後に戻るだけになってしまうので~1により、「4d1c4e4の1つ前」を指定しています。

変更を無かったことにするコマンドがgit checkout [HEAD] -- <file_path>なので、考えてみれば同じ動作ですね。

ちなみに、複雑な変更であれば、

git checkout --patch 4d1c4e4~1 -- <file_path>

とすれば、塊ごとに戻すかどうか決めることが出来ます。(--patch-pにもできます)