当然,我不时使用
git update-index --assume-unchanged [<file> ...]
要撤消并重新开始跟踪(如果您忘记了未跟踪的文件,请参阅此问题):
git update-index --no-assume-unchanged [<file> ...]
相关文件:
--[no-]assume-unchanged
指定此标志时,不更新为路径记录的对象名称。相反,此选项设置/取消设置路径的“假定不变”位。当“假设不变”位打开时,用户承诺不更改文件并允许 Git 假设工作树文件与索引中记录的内容匹配。如果要更改工作树文件,则需要取消设置以告知 Git。lstat(2)
当在系统调用非常慢的文件系统(例如 cifs)上处理大型项目时,这有时会很有帮助。
如果 Git 需要修改索引中的这个文件,例如在提交合并时,Git 将失败(优雅地);因此,如果假定的未跟踪文件在上游发生更改,您将需要手动处理这种情况。
在这种情况下优雅地失败意味着,如果在您进行拉取时该文件的上游有任何更改(合法更改等),它会说:
$ git pull
…
From https://github.com/x/y
72a914a..106a261 master -> origin/master
Updating 72a914a..106a261
error: Your local changes to the following files would be overwritten by merge:
filename.ext
并且会拒绝合并。
此时,您可以通过恢复本地更改来克服这个问题,这是一种方法:
$ git checkout filename.ext
然后再次拉动并重新修改您的本地文件,或者可以设置–no-assume-unchanged
并且您可以在那时进行正常的存储和合并等。