Git update-index'i geri al --skip-worktree


148

Bir süre önce git tarafından izlenen bir dosyadaki değişiklikleri yoksaymak için bunu yaptım:

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

Şimdi aslında bu dosyada kaynak değişiklik yapmak istiyorum. Etkilerini nasıl geri alabilirim skip-worktree?


11
Ayrıca 'skip-worktree' durumunda dosyaların listesini nasıl alabilirim?
troex

Yanıtlar:



35

Http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html adresine göre ,

git ls-files -v

özel bir harfle işaretlenmiş "değişmediğini varsay" ve "atlama-çalışma ağacı" dosyalarını görmek için. "Skip-worktree" dosyaları ile işaretlenir S.

Düzenleme : @amacleod belirtildiği gibi, tüm gizli dosyaları listelemek için bir takma ad yapmak hatırlamak gerekmez böylece sahip olmak için güzel bir hile. Kullandığım alias hidden="git ls-files -v | grep '^S'"benim .bash_profile dosyasına. Harika çalışıyor!


9
Temiz. git ls-files -v | grep '^S'Sadece skip-worktree ile "gizlediğim" dosyaları listelemek için kullanabilirsiniz . Bu komut için bir takma adı "gizli" hale getirmeyi umuyordu, ancak takma ada bir boru yönlendirmesi koymak işe yaramadı.
amacleod

5
@ amacleod kullanımı a !. Bunun gibi [alias] ignored = !git ls-files -v | grep "^S"Test edildi, çalışıyor.
Steven Lu

@amacleod Windows için alternatif bir komut önerebileceğinizi düşünmüyor musunuz?
Steve Chambers

1
@SteveChambers, Kurulum kısa, grepbilmiyorum. Kabuğuna bağlı, sanırım. Git Bash geliyor grep, sanırım.
amacleod

1
Brilliant, thanks @amacleod - sadece yolumda değildi. Windows üzerinde çalışmak için değiştirmek için gereken tek şey teklif tarzı oldu - 'işe yaramadı ama "yaptım, yanigit ls-files -v | grep "^S"
Steve Chambers

17

Uygulanan tüm dosyaları geri almak için worktree atlayın, aşağıdaki komutu kullanabilirsiniz:

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 tüm dosyaları durumlarıyla birlikte basar
  2. grep -i ^S dosyaları filtreler ve yalnızca çalışma ağacını (S) atla veya çalışma ağacını atla'yı seçer ve değişmez (ler) değerini alır, -i büyük / küçük harfe duyarlı sayılır
  3. cut -c 3- durumu kaldıracak ve yalnızca yolları bırakacak, 3. karakterden sonuna kadar kesecek
  4. tr '\012' '\000' satır sonu karakterini (\ 012) sıfır karakterine (\ 000) değiştirir
  5. xargs -0 git update-index --no-skip-worktreegit update-index --no-skip-worktreegeri almak için sıfır karakterle ayrılmış tüm yolları geçirir

1
Bu en iyi cevaptır
Dev

Bu cevap saf altın!
yossico

7

@ GuidC0DE cevabına göre, Powershell için bir sürüm ( posh-git kullanıyorum )

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

Ve referans için ayrıca dosyaları gizlemek için ters komut:

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

3

Tortoise Git kullananlar için:

  1. Klasöre veya belirli bir dosyaya sağ tıklayın, ardından TortoiseGit > Check for modifications
  2. Sadece kontrol et Show ignore local changes flagged files. Yok saydığınız dosyayı (veya klasörü sağ tıkladıysanız yoksaydığınız tüm dosyaları) görmelisiniz.
  3. Dosyayı sağ tıklayın ve Unflag as skip-worktree and assume-unchanged

3

Bash takma adlarını seven herkes için, işte hepsini yönetme setim (C0DEF52'ye göre)

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

Bu cevap Windows'u kullanan daha az teknik kişiye yöneliktir.

"Skip-worktree" yi tıkladığınız dosyaları hatırlamıyor / bilmiyorsanız, şunu kullanın:

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".

Sorununuzu çözmek için:

Dosyalara gidebilirsiniz -> sağ tıklayın -> önceki bir sürüme geri yükleyin -> üstteki "git" sekmesine tıklayın -> "atlama-worktree" onay kutusunun işaretini kaldırın -> alttaki "Uygula" ya tıklayın.

Dosyalar elle düzeltmek için çok fazla ise, diğer cevaplara başvurmanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.