web-dev-qa-db-ja.com

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

しばらく前に、gitによって追跡されるファイルへの変更を無視するためにこれを行いました。

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

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

ありがとう、ケビン

121
Kevin Burke

あぁ!私は単に欲しい:

git update-index --no-skip-worktree <file>
164
Kevin Burke

http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html に従って、使用

git ls-files -v

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

Edit@ amacleod が述べたように、すべての隠しファイルをリストするエイリアスを作成するのは素晴らしいトリックです。覚える必要はありません。私が使う alias hidden="git ls-files -v | grep '^S'"私の.bash_profileで。うまくいきます!

32
Stefan Anca

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

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-worktreeは、ゼロ文字で区切られたすべてのパスをgit update-index --no-skip-worktreeに渡して元に戻します
15
C0DEF52

@ 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)
2
eXavier

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

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