git mvとmvコマンドの違い
git mv
git mvでファイル名を変更した場合、Git側はファイル名が変更されたことを理解し「renamed」と表示される。
$ ls README.md newfile.txt # ファイル名をnewfile2.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は名前変更前を削除、名前変更後を未追跡の状態にする。
# ファイル名をnewfile2.txtに変更 $ 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をしているのとやっていることは変わらないので同じ結果になる。