確かに、私は時々これを正確に使用して行います
git update-index --assume-unchanged [<file> ...]
元に戻して追跡を再開するには(追跡されていないファイルを忘れた場合は、この質問を参照してください):
git update-index --no-assume-unchanged [<file> ...]
関連ドキュメント:
--[no-] assert-unchanged
このフラグを指定すると、パスに記録されているオブジェクト名は更新されません。代わりに、このオプションは、パスの「変更されていないと見なす」ビットを設定/設定解除します。「変更なしと見なす」ビットがオンの場合、ユーザーはファイルを変更しないことを約束し、作業ツリーファイルがインデックスに記録されているものと一致するとGitに想定させます。作業ツリーファイルを変更する場合は、Gitに通知するビットの設定を解除する必要があります。lstat(2)
これは、システムコールが非常に遅いファイルシステム(cifsなど)で大きなプロジェクトを操作する場合に役立つことがあります。
インデックス内のこのファイルを変更する必要がある場合、たとえばコミットでマージする場合など、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
マージを拒否します。
その時点で、ローカルの変更を元に戻すことでこれを克服できます。これが1つの方法です。
$ git checkout filename.ext
次に、もう一度プルしてローカルファイルを再変更するか、設定–no-assume-unchanged
して、その時点で通常のスタッシュやマージなどを実行できます。