Ich habe ein Git-Repo, bei dem ich vier Dateien aus rm
( nicht git rm
) gelöscht habe , und mein Git-Status sieht folgendermaßen aus:
# deleted: file1.txt
# deleted: file2.txt
# deleted: file3.txt
# deleted: file4.txt
Wie entferne ich diese Dateien von Git, ohne sie manuell durchlaufen und jede Datei wie folgt hinzufügen zu müssen:
git rm file1 file2 file3 file4
Im Idealfall suche ich nach etwas, das genauso git add .
funktioniert wie, wenn das möglich ist.
git
git-commit
git-add
git-rm
Codebeef
quelle
quelle
git rm
, das Entfernen könnte von einem separaten Tool, einer IDE oder einem Dateimanager erfolgen. Visual Studio kann beim Entfernen / Umbenennen von Dateien schmerzhaft sein.git rm
ist ein bisschen wie zu fragen, warum er nicht benutztgit vim
odergit cd
. Es ist eine dumme Sache, etwas zu tun, und git sollte einen eingebauten Befehl oder Alias haben, um gelöschte Dateien aus der Bereitstellung zu entfernen, und Sie sollten es nicht in SO nachschlagen oder Manpages in Ihrer Mittagspause lesen müssen.Antworten:
Für Git 1.x.
Dies weist git an, verfolgte Dateien automatisch bereitzustellen - einschließlich des Löschens der zuvor verfolgten Dateien.
Für Git 2.0
So inszenieren Sie Ihren gesamten Arbeitsbaum:
Um nur den aktuellen Pfad zu inszenieren:
quelle
git add -u folder/
um diesen Vorgang in einem Ordner auszuführenkönnte sein, wonach Sie suchen .. es funktioniert für mich ..
quelle
git ls-files --deleted -z | xargs -0 git rm
Sie können verwenden
Um die gelöschten Dateien zum Staging-Bereich hinzuzufügen, schreiben Sie sie fest
quelle
Wenn Sie einfach laufen:
git aktualisiert seinen Index, um zu wissen, dass die von Ihnen gelöschten Dateien tatsächlich Teil des nächsten Commits sein sollten. Dann können Sie "git commit" ausführen, um diese Änderung einzuchecken.
Oder wenn Sie laufen:
Diese Änderungen (und alle anderen) werden automatisch übernommen und festgeschrieben.
Update : Wenn Sie nur gelöschte Dateien hinzufügen möchten, versuchen Sie Folgendes:
quelle
git commit -a
wird tun, was ich will, außer in einigen Fällen habe ich Dateien, die ich nicht festschreiben möchte, also möchte ich das Festschreiben manuell vorbereiten.Sie suchen wahrscheinlich -A:
Dies ähnelt git add -u, fügt aber auch neue Dateien hinzu. Dies entspricht in etwa dem
addremove
Befehl von hg (obwohl die Bewegungserkennung automatisch erfolgt).quelle
So stellen Sie nur die gelöschten Dateien bereit :
Oder (der xargs Weg):
Du kannst Ihren bevorzugten Befehlssatz für eine bequeme spätere Verwendung als Alias verwenden.
quelle
xargs
es dauert ungefähr 15 Minuten, um sie zu meistern.git status | awk '/deleted/ {print $3}' | xargs git rm
wäre ein kürzerer Weg, das zu tun.grep | awk
... Sag einfach Neingit rm $(git ls-files --deleted)
ist das nicht bequeme (kopiert diese ).git ls-files --deleted | while read f; do git rm $f; done
xargs
ist wahrscheinlich effizienter als eine while-Schleife für eine große Liste, da bei jeder Ausführung mehr als ein Argument übergeben wirdgit rm
.git rm
Verwenden Sie die folgende-n
Option, um die Anzahl der Argumente zu begrenzen, die bei jeder Ausführung übergeben werden :git ls-files --deleted | xargs -n 15 git rm
Vor oder nach dem Löschen der eigentlichen Datei.
quelle
rm
und bereue es später.git add -u
? Es scheint sicherer zu sein, die spezifischen Dateien, die gelöscht wurden, zum Commit hinzuzufügen, als ALLE Änderungen hinzuzufügen .Wenn Sie git-add mit den Optionen '--all' oder '--update' verwenden, erhalten Sie möglicherweise mehr als Sie wollten. Neue und / oder geänderte Dateien werden ebenfalls zum Index hinzugefügt. Ich habe ein Bash-Alias-Setup für den Fall, dass ich gelöschte Dateien aus Git entfernen möchte, ohne andere Dateien zu berühren:
Alle Dateien, die aus dem Dateisystem entfernt wurden, werden dem Index als gelöscht hinzugefügt.
quelle
Nicht, dass es wirklich wichtig wäre, aber ich bin mit der gewählten Antwort nicht einverstanden:
... entfernt Dateien aus dem Index, wenn die entsprechenden Dateien im Arbeitsbaum entfernt wurden, stellt aber auch den geänderten neuen Inhalt der nachverfolgten Dateien bereit.
... rm hingegen nur die gelöschten Dateien, die verfolgt wurden.
Letzteres ist meiner Ansicht nach die bessere Option.
quelle
Wenn dies die einzigen Änderungen sind, können Sie dies einfach tun
alle Änderungen festschreiben. Dazu gehören gelöschte Dateien.
quelle
ist die beste Option, um nur gelöschte Dateien hinzuzufügen.
Hier sind einige andere Optionen.
quelle
git add -u
-u --update Stimmt nur mit bereits verfolgten Dateien im Index überein und nicht mit dem Arbeitsbaum. Dies bedeutet, dass niemals neue Dateien bereitgestellt werden, sondern dass geänderte neue Inhalte von verfolgten Dateien bereitgestellt werden und dass Dateien aus dem Index entfernt werden, wenn die entsprechenden Dateien im Arbeitsbaum entfernt wurden.
Wenn nein angegeben wird, ist standardmäßig "."; Mit anderen Worten, aktualisieren Sie alle verfolgten Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen.
quelle
git add -u
. Woher kommen all die anderen Dinge in Ihrer Antwort, die Dokumentation? Sie sollten auf die Dokumentation verlinken und sie blockieren, wenn dies der Fall ist.Diese einfache Lösung funktioniert gut für mich:
quelle
Wenn Sie es zu Ihrem hinzufügen möchten, gehen Sie wie folgt vor
.gitconfig
:Dann müssen Sie nur noch Folgendes ausführen:
quelle
git config --global alias.rmd '!git ls-files --deleted -z | xargs -0 git rm'
Dadurch werden alle gelöschten Dateien entfernt, die zuvor von git verfolgt wurden, und der Fall behandelt, in dem Ihre Dateinamen Leerzeichen enthalten.
Abhängig von Ihrer POSIX-Variante müssen Sie möglicherweise Folgendes verwenden
xargs -0 -r
: Dies führt dazuxargs
zu einem ordnungsgemäßen Beenden, wenn Nullinhalte weitergeleitet werden.BEARBEITEN:
--cached
und--deleted
Flags werden zusammen verwendet, um zu verhindern, dass versehentlich Dateien gelöscht werden, die noch nicht gelöscht wurden.quelle
Weisen Sie den Befehl an, Dateien, die geändert und gelöscht wurden, automatisch bereitzustellen, aber neue Dateien, von denen Sie Git nichts erzählt haben, sind nicht betroffen:
oder
quelle
Folgendes funktioniert auch dann, wenn Sie viele Dateien verarbeiten müssen:
Sie werden wahrscheinlich auch einen Kommentar abgeben wollen.
Weitere Informationen finden Sie unter: Nützliche Git-Skripte
quelle
Bitte verwenden Sie, um
-t
zu sehen, welcher Befehl tatsächlich ausgeführt wirdIch habe gerade die Antwort von Virender optimiert, um dasselbe zu tun:
quelle
Keines der zu git-add zu verwendenden Flags stellt nur entfernte Dateien bereit. Wenn Sie nur gelöschte Dateien geändert haben, ist das in Ordnung. Andernfalls müssen Sie den Git-Status ausführen und die Ausgabe analysieren.
Nach Jeremys Antwort habe ich Folgendes erhalten:
grep -v
Zeilen hinzufügen .git rm
.Jetzt in einen Shell-Alias stecken ...
quelle
Wie erwähnt
Stuft die entfernten Dateien zum Löschen ein, ABER AUCH geänderte Dateien zum Aktualisieren.
Um die geänderten Dateien zu entfernen, können Sie dies tun
wenn Sie Ihre Commits organisiert und sauber halten möchten.
HINWEIS: Dadurch können auch die gelöschten Dateien entfernt werden. Gehen Sie daher vorsichtig mit diesen Platzhaltern um.
quelle
Dies funktionierte bei mir, nachdem ich die Dateien bereits gelöscht hatte.
quelle
Ich brauchte das gleiche und benutzte Git Gui "Stage Changeed" Button. es fügt auch alles hinzu.
Und nachdem "Stage Change" "Commit" gemacht habe ...
Mein Arbeitsverzeichnis ist also wieder sauber.
quelle
Entfernt alle vom
git ls-files
Befehl aufgelisteten Dateien (-d zeigt nur gelöschte Dateien an). Funktioniert nicht für Dateien mit Leerzeichen im Dateinamen oder Pfad, ist aber einfach zu merkenquelle
Sie können
git add -u <filenames>
nur die gelöschten Dateien bereitstellen.Wenn Sie beispielsweise die Dateien gelöscht haben
templates/*.tpl
, verwenden Siegit add -u templates/*.tpl
.Das
-u
ist erforderlich, um auf Dateien zu verweisen, die im Repository vorhanden sind, aber nicht mehr im Arbeitsverzeichnis vorhanden sind. Andernfalls wird standardmäßiggit add
nach den Dateien im Arbeitsverzeichnis gesucht. Wenn Sie dort angegebene Dateien angeben, werden diese nicht gefunden.quelle
Hinzufügen eines Systemalias zum Bereitstellen gelöschter Dateien als Befehl
rm-all
UNIX
alias rm-all='git rm $(git ls-files --deleted)'
FENSTER
doskey rm-all=bash -c "git rm $(git ls-files --deleted)"
Hinweis
Windows muss
bash
installiert sein.quelle
(Noch eine Variation)
Ich wollte alle bereits gelöschten Dateien aus den Datenträgerdateien löschen, jedoch aus einem bestimmten Ordner, wobei die anderen Ordner unberührt blieben. Folgendes hat bei mir funktioniert:
quelle
etwas wie
kann es tun.
quelle
git diff --diff-filter=D --name-only | xargs git rm
Für visuelles Studio-Projekt
Dies ist nützlich, wenn der gelöschte Dateipfad Speicherplatz hat
quelle
Die flexibelste Lösung, die ich bisher gefunden habe, ist zu
Und wählen Sie alle gelöschten Dateien aus, die ich bereitstellen möchte.
(Beachten Sie, dass ich normalerweise alles über die Befehlszeile in git mache, aber git behandelt entfernte Dateien etwas umständlich).
quelle
git add -u path/to/my/deleted-files-pattern-*.yml
daher war dies die beste Antwort für mich (ich wollte nicht alle gelöschten Dateien inszenieren, sondern 50 von ein paar hundert).