我将所有文件移动到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
答案 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会检测重命名。
也就是说,如果你重命名它自己的提交,它通常会更好。