git update-index --skip-worktreeを元に戻します


148

少し前に、gitで追跡されるファイルへの変更を無視するためにこれを行いました:

git update-index --skip-worktree <file>

今、私は実際にそのファイルへの変更をソースにコミットしたいと思います。の影響を元に戻すにはどうすればよいskip-worktreeですか?


11
「skip-worktree」状態のファイルのリストを取得する方法にも興味がありますか?
troex 2012年

回答:



35

http://www.kernel.org/pub/software/scm/git/docs/git-update-index.htmlによると、

git ls-files -v

特別な文字でマークされた「変更されていない」と「スキップワークツリー」ファイルを表示します。「skip-worktree」ファイルにはが付いていSます。

編集@amacleodが述べたように、すべての隠しファイルを一覧表示するエイリアスを作成することは、覚えておく必要がないようにするための便利な方法です。alias hidden="git ls-files -v | grep '^S'".bash_profileで使用しています。それはうまくいきます!


9
きちんと。git ls-files -v | grep '^S'skip-worktreeで「非表示」にしたファイルのみを一覧表示するために使用できます。そのコマンドのエイリアスを「非表示」にすることを望んでいましたが、エイリアスにパイプリダイレクトを設定しても機能しないようでした。
amacleod 2014

5
@amacleodはを使用し!ます。このよう[alias] ignored = !git ls-files -v | grep "^S"に動作します。
Steven Lu

@amacleod Windowsの代替コマンドを提案できると思いませんか?
スティーブチェンバーズ

1
@SteveChambers、インストール不足、grepわかりません。あなたの殻に依存すると思います。Git Bashにはgrepと思います。
amacleod

1
素晴らしい、ありがとう@amacleod-ちょうど私の道になかった。これをWindowsで機能させるために変更する必要があった唯一のことは、見積もりスタイルでした-機能'しませんでした"が、つまりgit ls-files -v | grep "^S"
Steve Chambers

17

適用されたすべてのファイルを元に戻したい場合は、ワークツリーをスキップして、次のコマンドを使用できます。

git ls-files -v | grep -i ^S | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
  1. git ls-files -v すべてのファイルとそのステータスを印刷します
  2. grep -i ^S ファイルをフィルタリングし、ワークツリーのスキップ(S)またはワークツリーのスキップのみを選択し、変更されていない(s)と見なします。-iは大文字と小文字を区別しないことを意味します
  3. cut -c 3- ステータスを削除し、パスのみを残して、3番目の文字から最後まで切断します
  4. tr '\012' '\000' 行末文字(\ 012)をゼロ文字(\ 000)に置き換えます
  5. xargs -0 git update-index --no-skip-worktreegit update-index --no-skip-worktree元に戻すためにゼロ文字で区切られたすべてのパスを渡します

1
これが最良の答えである
のDev

この答えは純金です!
yossico

7

@ GuidC0DEの回答に基づいて、Powershellのバージョンを以下に示します(私はposh-gitを使用しています)

git update-index --no-skip-worktree $(git ls-files -v | sls -pattern "^S"| %{$_.Line.Substring(2)})

そして、参考のために、ファイルを非表示にする反対のコマンドも:

git update-index --skip-worktree $(git ls-files --modified)

3

Tortoise Gitを使用している場合:

  1. フォルダまたは特定のファイルを右クリックして、 TortoiseGit > Check for modifications
  2. チェックするだけShow ignore local changes flagged files。無視したファイル(またはフォルダを右クリックした場合は無視したすべてのファイル)が表示されます。
  3. ファイルを右クリックして選択します Unflag as skip-worktree and assume-unchanged

3

Bashエイリアスを愛する皆さんのために、これらをすべてルール化するための私のセットがあります(C0DEF52に基づく)

alias gitskip='git update-index --skip-worktree ' #path to file(s)
alias gitlistskiped='git ls-files -v | grep ^S'
alias gitunskip='git update-index --no-skip-worktree ' #path to file(s)
alias gitunskipall='git ls-files -v | grep -i ^S | cut -c 3- | tr ''\\012'' ''\\000'' | xargs -0 git update-index --no-skip-worktree'

0

この回答は、Windowsを使用している技術者の少ない方を対象としています。

「skip-worktree」をクリックしたファイルを覚えていない場合は、次のコマンドを使用してください。

git ls-files -v             //This will list all files, you are looking for the ones with an S at the beginning of the line. 

git ls-files -v | grep "S " //Use this to show only the lines of interest. Those are the files that have "skip-worktree".

問題を解決するには:

ファイルに移動できます->右クリック->以前のバージョンに復元->上部の「git」タブをクリック->「skip-worktree」チェックボックスをオフ->下部の「適用」をクリック

ファイルが多すぎて手動で修正できない場合は、他の回答を参照する必要があります。

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