Learn or Die

生涯勉強。Macです。

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をしているのとやっていることは変わらないので同じ結果になる。