我真的需要在git中使用这个命令
hg addremove
Run Code Online (Sandbox Code Playgroud)
所以现在看一下场景,看看mercurial会如何拯救我:
我在这里有一些dir/htdocs/static/static.我不小心将文件移动到错误的位置(使用git-mv).无论如何......现在我手动移动了一些文件夹:
mv static static2
mv static2/static ./
Run Code Online (Sandbox Code Playgroud)
也许我已经在这里更改了一些文件......现在一切都很棒......所以现在git不知道发生了什么?他如何能够跟踪文件的移动而不用像mercurial那样通知addremove.
例如,现在我可以做mercurial:
hg addremove --similarity 80%
Run Code Online (Sandbox Code Playgroud)
就是这样 - 通过识别文件内容来追踪文件被移动的地方,并保存了我的文件历史记录.
这里的一个小伙子有一些技巧:
git add .
git ls-files --deleted | xargs git rm
Run Code Online (Sandbox Code Playgroud)
但那就像当时的CVS一样.你删除文件,你添加文件.怎么样保存文件的历史?
sno*_*rpe 25
基本上,git在应用提交更新工作树时总是会自动执行类似"addremove"的操作:它会查看提交中添加和删除的文件,并检测可能重命名的已添加和删除文件对(使用"变化量"启发式".所以你不必使用特殊的命令; 只需执行添加和删除,git稍后会自行解决问题.
在您的示例场景中,只需告诉git有关新文件:git add static
以及有关已删除文件的信息git add -u static
,并且您已准备好提交.如果您git status
在提交之前执行了操作,则可以看到它已经检测到重命名.
[正如另一个提到的答案,git add -A
是一个很好的快捷方式,只是添加工作树中的所有内容,包括新文件和已删除文件; 使用上述较窄命令的唯一原因是,如果您想避免添加恰好位于工作树中的其他一些更改.]
Git不会通过其他元数据跟踪重命名,因此您可以git add -A
完全确保您没有遗漏任何元数据.
虽然Git跟踪"整个树"的历史,而不是文件的历史,你可以激活其重命名,并与像命令事后复制检测git log -M -C
和git log --follow <file>
.
简短的回答.最相似的命令hg addremove
在git的是:
git add -A
Run Code Online (Sandbox Code Playgroud)
Oooorr ...
git add --all
Run Code Online (Sandbox Code Playgroud)