2012-06-21 6 views
83

Vor einiger Zeit habe ich diese Änderungen an einer Datei von git verfolgt zu ignorieren:Rückgängig git update-Index --skip-worktree

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

Jetzt will ich Änderungen tatsächlich zu Quelle zu dieser Datei begehen. Wie mache ich die Effekte von skip-worktree rückgängig?

Danke, Kevin

+7

Ich bin auch interessiert, wie man eine Liste von Dateien im Status 'Skip-Worktree' bekommen kann? – troex

+0

@troex https://Stackoverflow.com/q/42363881/1615903 – 1615903

Antwort

107

Aha! Ich will einfach:

git update-index --no-skip-worktree <file> 
+0

Ich liebe die Aha! –

+0

lol sollte bekannt sein –

29

Nach http://www.kernel.org/pub/software/scm/git/docs/git-update-index.html verwenden

git ls-files -v

um zu sehen, die "unverändert übernehmen" und "Skip-worktree" Dateien mit einem speziellen Buchstaben gekennzeichnet. Die "Skip-Worktree" -Dateien sind mit S markiert.

bearbeiten: Wie @amacleod erwähnt, einen Aliasnamen machen die alle versteckten Dateien aufzulisten ist ein netter Trick so haben, dass Sie es nicht merken müssen. Ich verwende alias hidden="git ls-files -v | grep '^S'" in meinem .bash_profile. Es funktioniert super!

+8

Ordentlich. Ich kann 'git ls-files -v | verwenden grep '^ S'', um nur Dateien aufzulisten, die ich mit skip-worktree "versteckt" habe. Hopped, um einen Alias ​​für diesen Befehl "versteckt" zu machen, aber eine Pipe-Umleitung in den Alias ​​zu tun, schien nicht zu funktionieren. – amacleod

+4

@amacleod Verwenden Sie ein '!'. So wird '[alias] ignoriert =! Git ls-files -v | grep "^ S" 'Getestet, funktioniert. –

+0

@amacleod Angenommen, Sie könnten einen alternativen Befehl für Windows vorschlagen? –

11

Wenn Sie alle Dateien rückgängig machen möchten, die Sprung worktree angelegt wurde, 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 werden alle Dateien mit ihren Status drucken
  2. grep -i ^S werden die Dateien auswählen, und wählen Sie überspringe nur worktree (S) oder überspringe worktree und nehme unverändert (s) an, -i bedeutet, dass die Groß-/Kleinschreibung nicht beachtet wird
  3. cut -c 3- entfernt den Status und lässt nur Pfade zurück, vom 3. Zeichen bis zum Ende
  4. tr '\012' '\000' Zeilenende Zeichen ersetzen (\ 012) auf Null-Zeichen (\ 000)
  5. xargs -0 git update-index --no-skip-worktree werden alle Pfade durch Nullzeichen zu git update-index --no-skip-worktree getrennt passieren
  6. rückgängig zu machen
+0

Dies ist die beste Antwort – Dev

0

Basierend auf @ GuidC0DE Antwort, hier ist 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 der Dateien zu verstecken:

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