重新运行git文件比较算法

时间:2011-07-10 09:26:20

标签: git

我将所有文件移动到git忽略的文件夹中(过热的.gitignore)。当我在.gitignore中修复问题时,我有一组已删除的文件和一组新的未跟踪文件 - 即使大多数文件都是相同的。如何让git重新运行其比较算法以正确跟踪这些文件中的更改?

我输入内容的总结

mkdir ./libs
git mv ./src-code ./libs/src-code #I might just have used mv
#a few changes
git status 
# nothing changed, huh?
# oh, I am ignoring all libs directories in .gitignore, 
#   I meant to only ignore the one at the root - fixed
git status
#   deleted:    ./src-code/...
# Untracked files:
#       ./libs/src-code

3 个答案:

答案 0 :(得分:1)

当我遇到此问题时,这是因为我mv而不是git mv ed。只需mv将它们取回,然后git mv将它们放在您想要的位置。

答案 1 :(得分:1)

git mv实际上没有任何你不能没有的东西,因为git 在大多数情况下,移动在git中表示为添加文件/已删除文件对,git可以在显示diff或更新工作树时检测并视为移动。 [根据你的问题,看起来你已经知道了这一点,但仅仅是为了完整性......]

这样做的一个结果是使用普通的非git mv(或任何其他工具)来移动git控制的文件是完全正确的;结果不会有任何不同(例如,如果您想使用一些特殊工具来进行移动,这可能很方便。)

然而,与对工作树的任何更改一样,在您使用git add将已更改的内容添加到索引之前,git并不真正“知道”它。 / p>

所以git mv A B只是一个大致相当于mv A B; git add -u A; git add B的便利命令;既然你已经完成了mv,那么你可以用同样的方式使用git add来告诉git有关新文件和已删除文件的信息。如果可以将工作树中的其他更改放入索引中,那么更简单的方法就是git add -A,这会将新文件和工作树中的更改(包括已删除的文件)添加到索引。

[这通常就是我所做的:mv A B; ......更多变化...... ; git add -A; git commit ...

────────
这与许多其他源控制系统不同,后者可能具有存储在提交中的移动的明确概念等。

答案 2 :(得分:0)

git mv是一个相当过分的解决方案。只需git add libs/src-code然后git commit -a。 git会检测重命名。

也就是说,如果你重命名它自己的提交,它通常会更好。