Cofnij git update-index --skip-workktree


148

Jakiś czas temu zrobiłem to, aby zignorować zmiany w pliku śledzonym przez git:

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

Teraz faktycznie chcę zatwierdzić zmiany w tym pliku do źródła. Jak cofnąć skutki programu skip-worktree?


11
Interesuje mnie również, jak uzyskać listę plików w stanie „pomiń obszar roboczy”?
troex

Odpowiedzi:



35

Zgodnie z http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html użyj

git ls-files -v

aby zobaczyć pliki "zakładaj niezmienione" i "pomiń obszar roboczy" oznaczone specjalną literą. Pliki „skip-workktree” są oznaczone S.

Edycja : jak wspomniał @amacleod , utworzenie aliasu do listy wszystkich ukrytych plików jest fajną sztuczką, abyś nie musiał go pamiętać. Używam alias hidden="git ls-files -v | grep '^S'"w moim .bash_profile. Działa świetnie!


9
Schludny. Mogę użyć git ls-files -v | grep '^S'do wyświetlenia tylko plików, które zostały „ukryte” za pomocą skip-worktree. Miałem nadzieję, że alias zostanie „ukryty” dla tego polecenia, ale umieszczenie przekierowania potoku w aliasie wydawało się nie działać.
amacleod

5
@amacleod użyj pliku !. Jak ten [alias] ignored = !git ls-files -v | grep "^S"Testowany, działa.
Steven Lu

@amacleod Nie myśl, że byłbyś w stanie zasugerować alternatywne polecenie dla systemu Windows?
Steve Chambers

1
@SteveChambers, Krótko o instalacji grep, nie wiem. Chyba zależy od twojej powłoki. grepMyślę, że Git Bash jest dostępny .
amacleod

1
Świetnie, dzięki @amacleod - po prostu nie było mi na drodze. Jedyną rzeczą, którą musiałem zmienić, aby to działało w systemie Windows, był styl cytowania - 'nie działał, ale działał ", tj.git ls-files -v | grep "^S"
Steve Chambers

17

Jeśli chcesz cofnąć wszystkie zastosowane pliki, pomiń obszar roboczy, możesz użyć następującego polecenia:

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 wydrukuje wszystkie pliki wraz ze stanem
  2. grep -i ^S przefiltruje pliki i wybierze tylko pomiń drzewo robocze (S) lub pominie drzewo robocze i przyjmie bez zmian, -i oznacza ignorowanie wielkości liter
  3. cut -c 3- usunie status i pozostawi tylko ścieżki, odcinając od trzeciego znaku do końca
  4. tr '\012' '\000' zamieni znak końca linii (\ 012) na znak zera (\ 000)
  5. xargs -0 git update-index --no-skip-worktreebędzie przekazywać wszystkie ścieżki oddzielone znakiem zero, git update-index --no-skip-worktreeaby cofnąć

1
To najlepsza odpowiedź
Dev

Ta odpowiedź to czyste złoto!
yossico

7

Na podstawie odpowiedzi @ GuidC0DE, oto wersja dla Powershell (używam posh-git )

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

A dla odniesienia również przeciwne polecenie, aby ukryć pliki:

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

3

Dla tych, którzy używają Tortoise Git:

  1. Kliknij prawym przyciskiem myszy folder lub określony plik, a następnie wybierz TortoiseGit > Check for modifications
  2. Tylko sprawdź Show ignore local changes flagged files. Powinieneś zobaczyć plik, który zignorowałeś (lub wszystkie pliki, które zignorowałeś, jeśli kliknąłeś folder prawym przyciskiem myszy)
  3. Kliknij plik prawym przyciskiem myszy i wybierz Unflag as skip-worktree and assume-unchanged

3

Dla wszystkich, którzy kochają aliasy Bash, oto mój zestaw do rządzenia nimi wszystkimi (oparty na 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

Ta odpowiedź jest skierowana do osób mniej technicznych korzystających z systemu Windows.

Jeśli nie pamiętasz / nie wiesz, na które pliki kliknąłeś „skip-workktree”, użyj:

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

Aby rozwiązać problem:

Możesz przejść do plików -> kliknij prawym przyciskiem myszy -> przywróć poprzednią wersję -> kliknij zakładkę „git” na górze -> odznacz pole wyboru „skip-workktree” -> kliknij „Apply” na dole.

Jeśli plików jest zbyt wiele, aby można je było naprawić ręcznie, należy zapoznać się z innymi odpowiedziami.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.