確かに、私は時々これを正確に使用しています
git update-index --assume-unchanged [<file> ...]
元に戻し、追跡を再開するには(追跡されていないファイルを忘れた場合は、この質問を参照してください):
git update-index --no-assume-unchanged [<file> ...]
関連ドキュメント:
-[no-] assume-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
して、その時点で通常のスタッシュやマージなどを実行できます。