git mvの使い方!ファイルの移動や名前変更を追跡可能にできます!

Gitを使っていると、ファイルの名前を変えたり、別のディレクトリ(フォルダ)に移動させたりすることがあります。

その際に便利なのがgit mvコマンドです。このコマンドを使うと、ファイルの変更履歴を保ちながら名前を変えたり移動したりすることができます。

この記事ではgit mvコマンドについて、以下の内容をわかりやすく解説します。

  • git mvとは
  • git mvの使い方
    • 例1: ファイル名を変更する
    • 例2: ファイルを別のディレクトリに移動する
    • 例3: ファイル名の変更とディレクトリの移動を同時に行う
  • git mvを使わない場合」と「git mvを使った場合」における動作の違い

git mvとは

git mvは、Gitでファイルを移動(move)したり名前を変更(rename)したりするためのコマンドです。

例えば、ファイル名を通常の方法(OSのファイルマネージャーやmvコマンド)で変更した場合、Gitはこの変更を自動で認識しません。そのため、ファイル名変更前のファイルは削除(deleted)扱いとなり、ファイル名変更後のファイルは新規作成(Untracked)扱いになります。その結果、ファイルの変更履歴が失われてしまいます。

git mvを使うことで、以下の作業を一度に行い、上記の問題を解決できます。

  • ファイルやディレクトリの名前を変更、または移動しても、変更履歴が維持される
  • 変更内容が自動でステージングされる(git addを実行した状態)

git mvの使い方

git mvの基本構文を以下に示します。

git mv <旧ファイルパス> <新ファイルパス>

次に、いくつかの使用例を紹介します。

例1: ファイル名を変更する

例えば、old_name.txtnew_name.txtに変更したい場合は、次のコマンドを実行します。

git mv old_name.txt new_name.txt

このコマンドを実行すると、old_name.txtnew_name.txtにリネームされ、変更がステージングされます。この状態で、git commitを行えば、ファイル名の変更がリポジトリに記録されます。

例2: ファイルを別のディレクトリに移動する

例えば、docsディレクトリ内のsample.txtsrcディレクトリに移動したい場合は、次のコマンドを実行します。

git mv docs/sample.txt src/

このコマンドを実行すると、docsディレクトリからsrcディレクトリにsample.txtが移動され、変更がステージングされます。

例3: ファイル名の変更とディレクトリの移動を同時に行う

名前の変更とディレクトリの移動を同時に行うこともできます。例えば、docsディレクトリ内のsample.txtsrcディレクトリに移動して、sample.txtsample_new.txtに変更したい場合は、次のコマンドを実行します。

git mv docs/sample.txt src/sample_new.txt

これでファイルが新しい場所に移動され、名前も変更されます。

では次に、「git mvを使わない場合」と「git mvを使った場合」における動作の違いを見てみましょう。

git mvを使わない場合

ファイル名を通常の方法(OSのファイルマネージャーやmvコマンド)で変更した場合、Gitはこの変更を自動で認識しません。今回は一例して、以下のmvコマンドを使用して、Gitで管理しているold_name.txtnew_name.txtにリネームしたとします。

mv old_name.txt new_name.txt

変更後、ファイルがどのような状態にあるかをgit statusで確認すると、次のように表示されます。

$ git status
On branch main
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    old_name.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        new_name.txt

no changes added to commit (use "git add" and/or "git commit -a")

上記の実行結果から分かるように、ファイル名変更前のold_name.txtは削除(deleted)扱い、変更後のnew_name.txtは新規ファイル(Untracked)扱いとなります。このため、old_name.txtで行った変更履歴が引き継がれず、変更履歴がたどりにくくなります。

git mvを使った場合

次に、git mvコマンドを使用してファイル名を変更した場合を見てみましょう。例えば、old_name.txtnew_name.txtに変更するには、次のコマンドを実行します。

git mv old_name.txt new_name.txt

変更後、ファイルがどのような状態にあるかをgit statusで確認すると、次のように表示されます。

$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        renamed:    old_name.txt -> new_name.txt

Changes to be committed: の下に renamed: old_name.txt -> new_name.txt と表示され、ファイル名の変更がステージングされていることがわかります。

本記事のまとめ

この記事ではgit mvコマンドについて、以下の内容を説明しました。

  • git mvとは
    • Gitでファイルの移動や名前変更を行うコマンド
    • 変更履歴を維持しながらファイル操作が可能
    • 変更内容が自動でステージングされる
  • git mvの基本構文
    • git mv <旧ファイルパス> <新ファイルパス>
  • git mvを使わない場合の動作
    • 通常のファイル操作だと変更履歴が引き継がれない
  • git mvを使った場合の動作
    • ファイル変更がリネームとしてGitに認識され、変更履歴が維持される

お読み頂きありがとうございました。