Update - eine bessere Version
Dieses Werkzeug ( https://github.com/mklepaczewski/git-clean-before-merge ) wird:
- nicht verfolgte Dateien löschen, die identisch sind mit ihren
git pull
Äquivalente,
- Änderungen an geänderten Dateien rückgängig zu machen, deren geänderte Version identisch ist mit ihrer
git pull
Äquivalente,
- geänderte/unverfolgte Dateien melden, die sich von ihren
git pull
Version,
- das Werkzeug hat die
--pretend
Option, die keine Dateien verändert.
Alte Fassung
Wie unterscheidet sich diese Antwort von anderen Antworten?
Die hier vorgestellte Methode entfernt nur Dateien, die durch die Zusammenführung überschrieben werden würden. Wenn Sie andere nicht verfolgte (möglicherweise ignorierte) Dateien in dem Verzeichnis haben, werden diese mit dieser Methode nicht entfernt.
Die Lösung
Dieses Snippet extrahiert alle nicht verfolgten Dateien, die von git pull
und löschen Sie sie.
git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} rm -rf "{}"
und dann einfach tun:
git pull
Dies ist kein Git-Porzellan-Befehl, also überprüfen Sie immer, was er mit tun würde:
git pull 2>&1|grep -E '^\s'|cut -f2-|xargs -I {} echo "{}"
Erklärung - weil Einzeiler beängstigend sind:
Hier ist eine Aufschlüsselung der Funktionen:
git pull 2>&1
- Erfassung git pull
ausgeben und alles nach stdout umleiten, so dass wir es leicht erfassen können mit grep
.
grep -E '^\s
- die Absicht ist, die Liste der nicht verfolgten Dateien zu erfassen, die durch git pull
. Die Dateinamen haben eine Reihe von Leerzeichen vorangestellt, die wir nutzen, um sie zu erhalten.
cut -f2-
- Leerzeichen am Anfang jeder in 2 erfassten Zeile entfernen.
xargs -I {} rm -rf "{}"
- uns xargs
um alle Dateien zu durchlaufen, ihre Namen in "{}" zu speichern und die rm
für jeden von ihnen. Wir verwenden -rf
um das Löschen zu erzwingen und nicht verfolgte Verzeichnisse zu entfernen.
Es wäre toll, die Schritte 1-3 durch ein Porzellan-Kommando zu ersetzen, aber ich kenne keine gleichwertige Lösung.