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