Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在git中删除hg addremove_Git_Mercurial - Fatal编程技术网

在git中删除hg addremove

在git中删除hg addremove,git,mercurial,Git,Mercurial,我真的需要git中的这个命令 hg addremove 现在看看这个场景,看看mercurial会如何拯救我: 我在这里有一些目录var/htdocs/static/static。我不小心将文件移动到了错误的位置(使用git mv)。无论如何现在我手动移动了一些文件夹: mv static static2 mv static2/static ./ 也许我也改变了这里的一些文件。。。现在一切都很好。。。所以现在git不知道发生了什么?他如何能够像mercurial使用addremove那样跟踪

我真的需要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通过识别文件内容跟踪文件移动的位置,我保存了我的文件历史记录

一个年轻人有一些技巧:

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

但这就像当年的CVS一样。删除文件就是添加文件。保存文件历史记录怎么样?

Git不会通过其他元数据跟踪重命名,因此您可以在完全保证不丢失任何元数据的情况下执行
Git add-A


虽然Git跟踪的是“整棵树”的历史记录而不是文件历史记录,但您可以在事后使用诸如
Git log-M-C
Git log--follow

之类的命令激活其重命名和复制检测。基本上,Git总是自动执行类似于“addremove”的操作当应用提交更新工作树时:它查看提交中添加和删除的文件,并检测可能重命名的添加和删除的文件对(使用“更改量”启发式)。因此,您不必使用特殊命令;只需进行添加和删除操作,git就会自己解决问题

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


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

简短回答。与git中的
hg addremove
最相似的命令是:

git add -A
哎哟

git add --all

对不起,我今天心情不好。你能编辑我应该输入什么命令而不是hg addremove来实现我的场景吗?我有5个命令,而不是一个(像在hg中),这让我非常困惑,所以我只是问一下你的文章的一个小版本,上面引用了所有的命令commands@holms:如果你的意思是相当于
hgaddremove
,那么就像我说的那样
gitadd-A
。git不关心在
add
时间进行重命名,因此
--相似性
与从
hg
git
@holms的转换无关:注意
git add-A
也会对已跟踪的文件进行阶段性更改。我不确定
hg addremove
是否有这种效果。所以你告诉我git add-A可以跟踪重命名,我所有的文件历史记录都会被保存?=)@holms:我是说git不会显式跟踪重命名,不管你如何添加或删除文件,所以不管你怎么做。任何重命名检测都只发生在事实发生之后。最后,通常有人会解释这个=)thnx。我想很多用户都有这个问题。。没有人对幕后发生的事情说什么..谢谢:)顺便说一句,另一个回复提到的“git add-A”是一个很好的快捷方式,如果你没有其他变化(我更新了我的答案,也包括了这一点)。我相当肯定git不会在提交时进行重命名检测,而是在提交后分析中,正如查尔斯·贝利(Charles Bailey)所说:@MaxNanasy你是对的,但你似乎误解了我所说的话(或者说,无论如何,你是想说的话)。我没有说git进行“提交时间”重命名检测,我说的是“git在向工作树应用提交时检测重命名”,即“事后”。我认为我的措辞在技术上有点笨拙,因为git实际上没有“应用提交”;我稍后会设法修改措辞,使之更加精确。