git mv和MS-DOS移动之间有区别吗



问题

如果我用git mv命令移动Git跟踪的文件,而不是用MS-DOS move或Windows资源管理器移动文件,会有什么不同吗?

在Subversion时代,有必要使用例如TortoiseSVN SVN Move versioned files here命令来保持历史记录的完整性。

我本以为它在Git中也能以同样的方式工作,但一个测试(见下面的例子(表明,Git自己检测到文件已经被移动,并且历史记录保持不变。

那么,为什么要使用git mv呢?

示例

C:test>git init
C:test>mkdir folder
C:test>cd folder
C:testfolder>echo "1" > file.txt
C:testfolder>git add .
C:testfolder>git commit -m "Initial commit"
C:testfolder>echo "2" >> file.txt
C:testfolder>git add .
C:testfolder>git commit -m "Update file.txt"
C:testfolder>move file.txt ..
C:testfolder>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

当您使用git mv时,它将为您的索引修改

如果你用操作系统手动操作,你需要进行

git add -A <previous-path-to-file-that-was-moved>
git add <new-path-to-file>

这样git就能理解您实际上重命名了该文件。

git mv也为您执行暂存操作,这样您就不需要在通过mv/MOVE/explorer.exe物理移动文件后执行git rm olfdfilegit add newfile

这是故意的。

相关内容

  • 没有找到相关文章

最新更新