web-dev-qa-db-ja.com

git update-indexを元に戻す

Gitが特定のディレクトリ/ファイルを見たり追跡したりするのを無視する方法。これを実行するだけです。

git update-index --assume-unchanged <file>

今、あなたはどうやってそれを元に戻すのですか? (それを想定外としましょう。)

396
adardesign

想定変更なしに設定されたundo/show dirの/ファイルを取得するには、を実行します。

git update-index --no-assume-unchanged <file>

assume-unchangedであるdirの/ファイルのリストを取得するには、を実行します。

git ls-files -v|grep '^h'

511
adardesign

これがあなたが頻繁に使うコマンドであるなら - あなたはそれのためにエイリアスを持つことを同様に考慮したいかもしれません。あなたのグローバル.gitconfigに追加:

[alias]
    hide = update-index --assume-unchanged
    unhide = update-index --no-assume-unchanged

これを.gitconfigに保存した後は、よりきれいなコマンドを実行することができます。

git hide myfile.ext

または

git unhide myfile.ext

この リソース はとても役に立ちました

83
adswebwork

git update-index関数にはいくつかのオプションがあり、以下のようにタイプすることができます。

git update-index --help

ここであなたは様々なオプションを見つけるでしょう - どのように関数update-indexで処理するか。

[ファイル名がわからない場合]

git update-index --really-refresh 

[あなたがファイル名を知っていれば]

git update-index --no-assume-unchanged <file>

無視リストに追加されたすべてのファイルを元に戻します。

git update-index --assume-unchanged <file>
37

--assume-unchangedオプションは見当たらないので、君は--assume-changedを意味していたと思います。 --assume-unchangedの逆は--no-assume-unchangedです。

35
hobbs

@adardesign、@adswebwork、および@AnkitVishwakarmaからの優れたオリジナルの回答、および@Bdoserror、@ Retsam、および@seanfからのコメントを、追加のドキュメンテーションリンクおよび簡潔なエイリアスと共に合成する...

基本コマンド

ファイルをリセットする 、つまり assume-changed を通常の状態に戻します。

git update-index --no-assume-unchanged <file>

と仮定して変更されていないすべての ファイルを一覧表示するには、次のようにします。

git ls-files -v | grep '^[a-z]' | cut -c3-

すべての 仮定変更されていないファイルを通常の状態にリセットします。

git update-index --really-refresh

ショートカット

これらの一般的なタスクをgitで実行しやすくするために、あなたのユーザのために.gitconfigに以下の エイリアス セクションを追加/更新してください(例:* nixまたはmacOSの~/.gitconfig)システム):

[alias]
    hide = update-index --assume-unchanged
    unhide = update-index --no-assume-unchanged
    unhide-all = update-index --really-refresh
    hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-
16
Will Cain

適用されたすべてのファイルを元の状態に戻し、キャッシュされた状態だけでなく変更しないと仮定したい場合(gitはそれらを小文字で文字でマークします)、次のコマンドを使用できます。

git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
  1. git ls-files -vはすべてのファイルをそのステータスと共に印刷します
  2. grep '^[a-z]'はファイルをフィルタリングし、変更なしと仮定するだけを選択します
  3. cut -c 3-は、ステータスを削除し、パスのみを残し、3文字目から最後までを切り捨てます
  4. tr '\012' '\000'は行末文字(\ 012)をゼロ文字(\ 000)に置き換えます
  5. xargs -0 git update-index --no-assume-unchangedは、すべてのパスをゼロ文字で区切ってgit update-index --no-assume-unchangedに渡して元に戻します。
15
C0DEF52

@adardesignの答えに追加して、assume-unchangedリストに追加されたすべてのファイルをno-assume-unchangedに一度にリセットしたい場合は、次のようにします。

git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true

これはgrepから出力される2文字、すなわち"h "を取り除き、ファイル名に含まれている可能性のあるスペースをすべてエスケープし、最後に|| trueはループ内のファイルにエラーがある場合にコマンドが途中で終了するのを防ぎます。

11
sagunms

Git Extensions を使用している場合は、以下の手順に従ってください。

  1. コミットウィンドウに行きます。
  2. 作業ディレクトリの変更という名前のドロップダウンをクリックします。
  3. 未変更ファイルの表示オプションを選択します。
  4. 仮説を解きたいファイルを右クリックします。
  5. 前提条件を変更しないを選択します。

これで終わりです。

2
Shivang Gupta

ここでは説明しません。しかし、私の2セントを追加したいと思います。時々、私はビルドを実行し、それがたくさんのファイルを変更し、それから私が何かに取り組むことを望むので、このコマンドは本当に私に大いに役立ちます。

git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`

他の誰かがそれが同様に役に立つことを願っています。

0
Tyagi Akhilesh