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
?
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
?
Odpowiedzi:
Aha! Po prostu chcę:
git update-index --no-skip-worktree <file>
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!
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ć.
!
. Jak ten [alias] ignored = !git ls-files -v | grep "^S"
Testowany, działa.
grep
, nie wiem. Chyba zależy od twojej powłoki. grep
Myślę, że Git Bash jest dostępny .
'
nie działał, ale działał "
, tj.git ls-files -v | grep "^S"
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
git ls-files -v
wydrukuje wszystkie pliki wraz ze stanemgrep -i ^S
przefiltruje pliki i wybierze tylko pomiń drzewo robocze (S) lub pominie drzewo robocze i przyjmie bez zmian, -i oznacza ignorowanie wielkości litercut -c 3-
usunie status i pozostawi tylko ścieżki, odcinając od trzeciego znaku do końcatr '\012' '\000'
zamieni znak końca linii (\ 012) na znak zera (\ 000)xargs -0 git update-index --no-skip-worktree
będzie przekazywać wszystkie ścieżki oddzielone znakiem zero, git update-index --no-skip-worktree
aby cofnąć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)
Dla tych, którzy używają Tortoise Git:
TortoiseGit > Check for modifications
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)Unflag as skip-worktree and assume-unchanged
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'
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.