Warnung: Verwenden Sie den folgenden Befehl nur, wenn Sie nicht festgeschriebene Arbeit verlieren möchten!
Die Verwendung git reset
wurde erklärt, aber Sie haben auch um eine Erklärung der Pipe-Befehle gebeten.
git ls-files -z | xargs -0 rm -f
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
Der Befehl git ls-files
listet alle Dateien auf, die git kennt. Die Option -z
legt ihnen ein bestimmtes Format auf, das von ihnen erwartete Format xargs -0
, das sie dann aufruft. Dies rm -f
bedeutet, dass sie entfernt werden müssen, ohne auf Ihre Zustimmung zu prüfen.
Mit anderen Worten: "Listen Sie alle Dateien auf, die git kennt, und entfernen Sie Ihre lokale Kopie".
Dann kommen wir zu git diff
, was Änderungen zwischen verschiedenen Versionen von Elementen zeigt, über die Git Bescheid weiß. Dies können Änderungen zwischen verschiedenen Bäumen, Unterschiede zwischen lokalen Kopien und Remote-Kopien usw. sein.
Wie hier verwendet, werden die nicht bereitgestellten Änderungen angezeigt. die Dateien, die Sie geändert, aber noch nicht festgeschrieben haben. Die Option --name-only
bedeutet, dass Sie nur die (vollständigen) Dateinamen möchten und --diff-filter=D
dass Sie nur an gelöschten Dateien interessiert sind. (Hey, haben wir nicht einfach ein paar Sachen gelöscht?)
Dies wird dann in das xargs -0
zuvor gesehene geleitet, was sie aufruft git rm --cached
, was bedeutet, dass sie aus dem Cache entfernt werden, während der Arbeitsbaum in Ruhe gelassen werden sollte - außer das Sie haben gerade alle Dateien aus Ihrem Arbeitsbaum entfernt. Jetzt werden sie auch aus Ihrem Index entfernt.
Mit anderen Worten, alle bereitgestellten oder nicht bereitgestellten Änderungen sind weg und Ihr Arbeitsbaum ist leer. Weinen Sie, checken Sie Ihre Dateien frisch vom Ursprung oder von der Fernbedienung aus und wiederholen Sie Ihre Arbeit. Verfluche den Sadisten, der diese höllischen Zeilen geschrieben hat; Ich habe überhaupt keine Ahnung, warum jemand dies tun möchte.
TL; DR: Sie haben einfach alles abgespritzt; von vorne beginnen und git reset
von nun an verwenden.
rm -f
ist kein git-Befehl und hat keine--cached
Option. Ihre lokalen Dateien wurden vor Ihrer Ausführung gelöscht, daher können Siegit rm
meiner Meinung nach nichtgit rm
für irgendetwas verantwortlich gemacht werden.