質問
git mv
MS-DOSmove
や Windows エクスプローラーでファイルを移動するのではなく、コマンドで Git 追跡ファイルを移動すると違いはありますか?
Subversion の時代には、たとえば TortoiseSVNSVN Move versioned files here
コマンドを使用して履歴をそのまま保持する必要がありました。
Git でも同じように動作することを期待していましたが、テスト (以下の例を参照) では、Git 自体がファイルが移動されたことを検出し、履歴がそのまま保持されていることが示されました。
では、なぜgit mv
まったく使用するのですか?
例
C:\test>git init
C:\test>mkdir folder
C:\test>cd folder
C:\test\folder>echo "1" > file.txt
C:\test\folder>git add .
C:\test\folder>git commit -m "Initial commit"
C:\test\folder>echo "2" >> file.txt
C:\test\folder>git add .
C:\test\folder>git commit -m "Update file.txt"
C:\test\folder>move file.txt ..
C:\test\folder>cd ..
C:\test>git status
On branch master
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: folder/file.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
file.txt
no changes added to commit (use "git add" and/or "git commit -a")
C:\test>git add -A
C:\test>git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: folder/file.txt -> file.txt
C:\test>git commit -m "Moved file.txt with the move command"
使用していないにもかかわらず、履歴全体が保持されておりgit mv
、Git は名前の変更を検出したと言います。
C:\test>git log --oneline --follow file.txt
6bd3c05 Moved file.txt with the move command
5b55aea Update file.txt
5b9b255 Initial commit