Rückgängig machen git update-index --skip-worktree


148

Vor einiger Zeit habe ich dies getan, um Änderungen an einer von git verfolgten Datei zu ignorieren:

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

Jetzt möchte ich tatsächlich Änderungen an dieser Datei in die Quelle übernehmen. Wie mache ich die Auswirkungen von rückgängig skip-worktree?


11
Ich bin auch daran interessiert, wie man eine Liste von Dateien im Status "Arbeitsbaum überspringen" erhält.
Troex

Antworten:



34

Verwenden Sie laut http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html

git ls-files -v

um die mit einem Sonderbuchstaben gekennzeichneten Dateien "unverändert annehmen" und "Arbeitsbaum überspringen" anzuzeigen. Die "skip-worktree" -Dateien sind mit gekennzeichnet S.

Bearbeiten : Wie @amacleod bereits erwähnt hat, ist es ein guter Trick , einen Alias ​​zum Auflisten aller versteckten Dateien zu erstellen , damit Sie sich nicht daran erinnern müssen. Ich benutze alias hidden="git ls-files -v | grep '^S'"in meinem .bash_profile. Es funktioniert super!


9
Ordentlich. Ich kann git ls-files -v | grep '^S'nur Dateien auflisten, die ich mit skip-worktree "versteckt" habe. Ich hoffte, einen Alias ​​für diesen Befehl "versteckt" zu machen, aber das Einfügen einer Pipe-Umleitung in den Alias ​​schien nicht zu funktionieren.
Amacleod

5
@amacleod benutze a !. So [alias] ignored = !git ls-files -v | grep "^S"funktioniert Getestet.
Steven Lu

@amacleod Nehmen Sie nicht an, Sie könnten einen alternativen Befehl für Windows vorschlagen?
Steve Chambers

1
@SteveChambers, Kurz vor der Installation grepweiß ich nicht. Kommt auf deine Muschel an, denke ich. Git Bash kommt mit grep, denke ich.
Amacleod

1
Genial, danke @amacleod - war mir einfach nicht im Weg. Das einzige, was ich ändern musste, damit dies unter Windows funktioniert, war der Anführungszeichenstil - 'funktionierte nicht, "tat es aber, dhgit ls-files -v | grep "^S"
Steve Chambers

17

Wenn Sie alle angewendeten Dateien rückgängig machen möchten, können Sie den folgenden Befehl verwenden:

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 druckt alle Dateien mit ihrem Status
  2. grep -i ^S filtert Dateien und wählt nur Arbeitsbaum (S) überspringen oder Arbeitsbaum überspringen aus und nimmt unveränderte (n) an. -i bedeutet, Groß- und Kleinschreibung ignorieren
  3. cut -c 3- Entfernt den Status und lässt nur Pfade übrig, wobei vom 3. Zeichen bis zum Ende geschnitten wird
  4. tr '\012' '\000' ersetzt das Zeilenendezeichen (\ 012) durch das Nullzeichen (\ 000)
  5. xargs -0 git update-index --no-skip-worktreeÜbergibt alle durch Null getrennten Pfade an, git update-index --no-skip-worktreeum rückgängig zu machen

1
Dies ist die beste Antwort
Dev

Diese Antwort ist reines Gold!
Yossico

7

Basierend auf der @ GuidC0DE-Antwort ist hier eine Version für Powershell (ich benutze posh-git )

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

Und als Referenz auch den entgegengesetzten Befehl zum Ausblenden der Dateien:

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

3

Für diejenigen, die Tortoise Git verwenden:

  1. Klicken Sie mit der rechten Maustaste auf den Ordner oder auf die jeweilige Datei und wählen Sie dann TortoiseGit > Check for modifications
  2. Nur prüfen Show ignore local changes flagged files. Sie sollten die Datei sehen, die Sie ignoriert haben (oder alle Dateien, die Sie ignoriert haben, wenn Sie mit der rechten Maustaste auf den Ordner geklickt haben).
  3. Klicken Sie mit der rechten Maustaste auf die Datei und wählen Sie Unflag as skip-worktree and assume-unchanged

3

Für alle, die Bash-Aliase lieben, ist hier mein Set, um sie alle zu regieren (basierend auf 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'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.