当然,我有时会使用
git update-index --assume-unchanged [<file> ...]
要撤消并重新开始跟踪(如果您忘记了未跟踪的文件,请参阅此问题):
git update-index --no-assume-unchanged [<file> ...]
相关文件:
-[no-]假定不变
如果指定此标志,则不会更新为路径记录的对象名称。而是,此选项设置/取消设置路径的“假定不变”位。当“假定不变”位打开时,用户承诺不更改文件,并允许Git假定工作树文件与索引中记录的文件匹配。如果要更改工作树文件,则需要取消设置该位以告知Git。当在lstat(2)
系统调用非常慢的文件系统(例如cif)上处理大型项目时,这有时会很有帮助。
如果需要修改索引中的该文件(例如合并提交)时,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
,此时可以进行常规的隐藏和合并等。