git mv
git mvでファイル名を変更した場合、Git側はファイル名が変更されたことを理解し「renamed」と表示される。
$ ls
README.md newfile.txt
$ git mv newfile.txt newfile2.txt
$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: newfile.txt -> newfile2.txt
mvコマンド
mvでファイル名を変更した場合、Gitは名前変更前を削除、名前変更後を未追跡の状態にする。
$ mv newfile.txt newfile2.txt
$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: newfile.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
newfile2.txt
だが「git add .」をすると、git mvのときと同じようにちゃんとrenameされたことになっている。
$ git add .
$ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: newfile.txt -> newfile2.txt
どうしてstatusがgit mvと同じ結果になるのか
理由はgit mvが下記の省略形だから。
$ mv newfile.txt newfile2.txt
$ git add newfile2.txt
$ git rm newfile.txt
そのため、mvをしているのとやっていることは変わらないので同じ結果になる。