gitから一時的にファイルの追跡を解除する


449

自分のマシンにローカルgitをセットアップしました。gitを初期化したときに、コンパイル済みのライブラリとバイナリを追加しました。しかし、今は開発中にこれらのファイルを断続的にチェックインしたくありません。これらのファイルをリポジトリから削除したくありません。開発が完了するまで、これらのファイルを追跡しない方法はありますか?(私は.gitignoreを使用できないと思います。それはgitにないファイルに対してのみ機能するためです。一時的にファイルの追跡を無効にしたいと思います。)



回答:


723

git update-indexはあなたが望むことをするはずです

これは、ファイルへの変更を無視して開始することをgitに指示します
git update-index --assume-unchanged path/to/file

もう一度追跡を始めたいとき
git update-index --no-assume-unchanged path/to/file

Githubドキュメント:update-index


3
最後に、偶然にコミットされたdev-fileに対して実際に機能するコマンド、ありがとう:)
Richard de Wit

15
なぜgit rm -r --cached <file>しないのですか?
イーサン2015

23
@Ehsan git rm --cachedは、次のプル時に、同じブランチがチェックアウトされている他のマシンのローカルコピーを削除するように思われます。参照arlocarreon.com/blog/git/...とその下の、特に議論を。
MIT

3
私にとっては機能しません。ファイルに変更を加えると、ファイルはまだ含まれている変更に追加されます。除外することもできますが、ある時点で誤って追加される可能性があります。
MrFox、2015

8
不変の仮定は、この目的のためのものではありませんでした。このスレッド
Appy

264

あなたはあなたのファイルを追跡しないでおくことができます

git rm -r --cached <file>

ファイルを追加する

git add -u

彼らはあなたが望むものを押したり、何でもします。



git rm --cached .DS_Store その後、それが印刷rm '../.DS_Store'され、ローカルファイルが削除されますか?(git version 2.6.4 (Apple Git-63)
Weishi Zeng 2016


4
ソース内のファイルが削除されるため、これは正しい答えではありません。OPは、そのファイルのローカルな変更を無視し、追跡を完全に削除し
たく

2
警告:追跡を解除するファイルも削除されます。解決策は、すべてのファイルをどこかにコピーし、コミット後にそれらをコピーすることです。
詩編

111
git rm --cached

ただし、コンパイル済みのバイナリと外部依存関係を最初からコミットするべきではありません。代わりに、Bundlerなどのツールを使用してそれらをプルします。


2
ディレクトリの-rオプション(再帰的)を忘れないでください:git rm -r --cached
Anatoliy

36

次のコマンドを使用してファイルの追跡を解除します

git rm --cached <file path>

7

git-bookはこれをセクション2.4:「Undoing Things」で言及しています。基本的には、一部のファイルのインデックスの状態をHEAD状態、つまり最新のチェックアウト(またはコミット)の状態にリセットする必要があります。これにより、ファイルの現在のインデックスへのステージングが取り消されます。このタスクのコマンドはgit reset。[1] です。

したがって、実行する必要があるコマンドは次のとおりです。

git reset HEAD /path/to/file

新しいバージョンのgit(1.6以降であると思います)では、このコマンド(およびその他の多く)を実行する際のヒントとして使用できますgit status。これらのバージョンは非常にユーザーフレンドリーです。個人的なヒント:ステージングするファイルが少ない場合は、を使用してくださいgit add -i。これにより、対話型のステージングツールが起動し、特に簡単になります。また、この本を読むことを強くお勧めします。実用的な状況でのgitの使用については非常に明確です。

[1] http://www.git-scm.com/book


これがgit reset [file]ファイルのステージを解除する最も簡単な方法であることに同意します。
スペクトラル

18
元に戻すと追跡解除は異なるものです
Jaime Sangcap '05年

6

元の質問に対する答えではありません。しかし、これは誰かを助けるかもしれません。

行った変更を確認するには(--assume-unchangedとしてマークされているファイルを確認します)

git ls-files -v

結果のファイルのリストには、1文字のプレフィックス(例:Hまたはh)が付きます。小文字(つまりh)の場合、ファイルは--assume-unchangedとマークれました。


5

各ファイルを個別に選択するのではなく、ビルドフォルダーまたはbinフォルダー内のすべてのファイルを削除する方法を尋ねていると想定しています。

このコマンドを使用できます

git rm -r -f /build\*

。ビルドディレクトリの親ディレクトリにいることを確認してください。
このコマンドは、bin /またはbuild /フォルダーにあるすべてのファイルを再帰的に「削除」します。「削除」という言葉は、gitがそれらのファイルが「削除」され、それらのファイルが追跡されないふりをすることを意味します。gitは実際にそれらのファイルを削除モードにマークします。

.gitignoreが次のコミットの準備ができていることを確認してください。
ドキュメント:git rm


1

git reset [ファイル]

ステージング領域から作業ディレクトリにファイルを戻す

ノードモジュールを.gitignoreファイルに追加するのを忘れることがよくあります。これで問題が解決します。



1

すべてのUntrackファイルを削除します。この端末コマンドを試してください

 git clean -fdx

gitの履歴からではなく、ディスクからファイルを削除します。
レオナルド

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.