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.txt
をnew_name.txt
に変更したい場合は、次のコマンドを実行します。
git mv old_name.txt new_name.txt
このコマンドを実行すると、old_name.txt
がnew_name.txt
にリネームされ、変更がステージングされます。この状態で、git commit
を行えば、ファイル名の変更がリポジトリに記録されます。
例2: ファイルを別のディレクトリに移動する
例えば、docs
ディレクトリ内のsample.txt
をsrc
ディレクトリに移動したい場合は、次のコマンドを実行します。
git mv docs/sample.txt src/
このコマンドを実行すると、docs
ディレクトリからsrc
ディレクトリにsample.txt
が移動され、変更がステージングされます。
例3: ファイル名の変更とディレクトリの移動を同時に行う
名前の変更とディレクトリの移動を同時に行うこともできます。例えば、docs
ディレクトリ内のsample.txt
をsrc
ディレクトリに移動して、sample.txt
をsample_new.txt
に変更したい場合は、次のコマンドを実行します。
git mv docs/sample.txt src/sample_new.txt
これでファイルが新しい場所に移動され、名前も変更されます。
では次に、「git mv
を使わない場合」と「git mv
を使った場合」における動作の違いを見てみましょう。
git mvを使わない場合
ファイル名を通常の方法(OSのファイルマネージャーやmv
コマンド)で変更した場合、Gitはこの変更を自動で認識しません。今回は一例して、以下のmv
コマンドを使用して、Gitで管理しているold_name.txt
をnew_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.txt
をnew_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に認識され、変更履歴が維持される
お読み頂きありがとうございました。