hg addremove in git

hol*_*lms 26 git mercurial

我真的需要在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是一个很好的快捷方式,只是添加工作树中的所有内容,包括新文件和已删除文件; 使用上述较窄命令的唯一原因是,如果您想避免添加恰好位于工作树中的其他一些更改.]


CB *_*ley 9

Git不会通过其他元数据跟踪重命名,因此您可以git add -A完全确保您没有遗漏任何元数据.

虽然Git跟踪"整个树"的历史,而不是文件的历史,你可以激活其重命名,并与像命令事后复制检测git log -M -Cgit log --follow <file>.


Rud*_*ela 6

简短的回答.最相似的命令hg addremovegit的是:

git add -A
Run Code Online (Sandbox Code Playgroud)

Oooorr ...

git add --all
Run Code Online (Sandbox Code Playgroud)