git mv してますか?

サーバーサイドエンジニアの柿﨑です。
早速ですが、git mv してますか?私はしてます。

git mv とは?

git mv はファイル名(またはディレクトリ名)変更時に、変更前の履歴を引き継ぐことができるコマンドです。

###
$ git mv -h
usage: git mv [<options>] <source>… <destination>

-v, –verbose be verbose
-n, –dry-run dry run
-f, –force force move/rename even if target exists
-k skip move/rename errors
–sparse allow updating entries outside of the sparse-checkout con
###

地味なコマンドですがないと困るコマンドなので紹介したいと思います。

git mv を使わないファイル名の変更

言葉で説明するだけだと分かりにくいので例を挙げます。
以下のように git で管理しているファイルがあるとします。

そして、ファイル名を普通に変更(mv コマンドやエクスプローラから直接変更など)すると以下のようになります。

ご覧の通り、ファイル名変更前のファイルは削除(deleted)扱いとなり、ファイル名変更後のファイルは新規作成(Untracked)扱いとなってしまいます。

要するに「ファイル名変更前のファイルと変更後のファイルは別物扱いとなる」ため、ファイル名変更前の変更履歴はここで途絶えてしまうのです。

これでは後から履歴を調査したいときに大変困ります(頻繁にやるわけではありませんが、ときどき要調査なときがあります)。

git mv コマンドでファイル名変更

そこで、掲題の git mv コマンドの出番です。
使い方は通常の mv コマンドと同様です。

###
$ git mv 変更前ファイル名 変更後ファイル名
###

実際に git mv コマンドでファイル名を変更すると以下のようになります。

ご覧の通り、ファイルが renamed となってファイル名の変更前後で同一ファイルだと認識してくれるので、ファイル名変更後も過去の変更履歴をそのまま引き継ぐことができます。

結論 : git mv コマンドを使おう

私は git はコマンド派なのでコマンドで紹介しましたが、GUIのツール(GitHub Desktopなど)には git mv に相当する機能が付いているはずです。
是非 git mv コマンドを活用して快適な git ライフを送りましょう。

目次
閉じる
エンジニア募集中!