git - git 中的 hg addremove

标签 git mercurial

我真的需要 git 中的这个命令

hg addremove

所以现在看看场景,看看 mercurial 将如何拯救我:

我在这里有一些目录 var/htdocs/static/static。我不小心将文件移动到错误的位置(使用 git-mv)。无论如何...现在我手动移动了一些文件夹:

mv static static2
mv static2/static ./

也许我也更改了这里的一些文件...现在一切都很好...所以现在 git 不知道发生了什么?他如何在不通知文件的情况下跟踪文件的移动,就像 mercurial 对 addremove 所做的那样。

例如现在使用 mercurial 我可以做:

hg addremove --similarity 80%

就是这样 - mercurial 通过识别文件内容跟踪文件移动的位置,并且我保存了我的文件历史记录。

一个小伙子在here有一些技巧:

git add .
git ls-files --deleted | xargs git rm

但这就像当时的 CVS 一样。你删除文件,你添加文件。如何保存文件的历史记录??

最佳答案

基本上,当 git 应用提交更新工作树时,它总是自动执行类似“addremove”的操作:它查看提交中添加和删除的文件,并检测可能重命名的添加和删除文件对(使用“变化量”启发式)。所以你不必使用特殊的命令;只需执行添加和删除操作,git 稍后会自行解决问题。

在您的示例场景中,只需告诉 git 关于新文件的信息:git add static 和关于删除的文件的信息:git add -u static,您就准备好了 promise 。如果您在提交之前执行 git status,您可以看到它已经检测到重命名。

[正如提到的另一个答案,git add -A 是一个很好的快捷方式,它只添加工作树中的所有内容,包括新的和删除的文件;使用上面更窄的命令的唯一原因是如果你想避免添加一些恰好在工作树中的其他更改。]

关于git - git 中的 hg addremove,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8021063/

相关文章:

version-control - hg copy 有什么作用?

linux - 使用 git 通过 U 盘在 Windows 和 Linux 之间传输数据

git - 是否推送不属于分支的 Git 提交?

git - 在交互式 rebase 之后,本地 Git 分支已经偏离原点

mercurial - 如何在 Mercurial 中仅隐式拉取特定分支

mercurial - 检查 url 是否是 mercurial 存储库(如 git ls-remote)

git - 如何删除所有 Gitlab 存储库?

git - 如何规范 Git 中的工作树行结尾?

python - 在 Ubuntu 9.10 的 Gnome 上安装 TortoiseHG?

c# - 如何在 Visual Studio 中生成项目的设置设计器文件