Entfernen Sie mehrere Dateien aus einem Git-repo, die bereits gelöscht wurden, von der Festplatte

StackOverflow https://stackoverflow.com/questions/492558

Frage

Ich habe ein Git-repo, die ich gelöscht habe vier Dateien aus der Verwendung rm (nicht git rm), und mein Git-status sieht wie folgt aus:

#    deleted:    file1.txt
#    deleted:    file2.txt
#    deleted:    file3.txt
#    deleted:    file4.txt

Wie Entferne ich diese Dateien aus dem Git zimmerreserviereung, ohne das Sie manuell zu Durchlaufen, und fügen Sie jede Datei wie folgt:

git rm file1 file2 file3 file4

Im Idealfall, ich bin auf der Suche nach etwas, das funktioniert in der gleichen Weise, dass git add . nicht, ob das möglich ist.

War es hilfreich?

Lösung

Für Git 1.x

$ git add -u

Das sagt git automatisch verfolgt Dateien Bühne - auch das Löschen der zuvor verfolgten Dateien.

Für Git 2.0

Ihren gesamten Arbeitsbaum zu inszenieren:

$ git add -u :/

Um die Bühne nur den aktuellen Pfad:

$ git add -u .

Andere Tipps

git ls-files --deleted -z | xargs -0 git rm 

könnte sein, was Sie suchen .. es funktioniert für mich ..

Sie können mit

git add -u

die gelöschten Dateien in den Staging-Bereich hinzuzufügen, dann begehen sie

git commit -m "Deleted files manually"

Wenn Sie einfach ausführen:

git add -u

git wird seinen Index zu wissen, aktualisieren, dass die Dateien, die Sie tatsächlich gelöscht haben sollten sich verpflichten, Teil der nächsten sein. Dann können Sie „git commit“ laufen in dieser Änderung zu überprüfen.

Oder, wenn Sie laufen:

git commit -a

Es dauert diese Änderungen automatisch (und alle anderen) und verpflichten sie.

Update : Wenn Sie nur gelöschte Dateien hinzufügen möchten, versuchen Sie:

git ls-files --deleted -z | xargs -0 git rm
git commit

Sie suchen wahrscheinlich für -A:

git add -A

Dies ist vergleichbar mit git add -u, sondern fügt auch neue Dateien. Das ist in etwa das Äquivalent von addremove Befehl des hg (obwohl der Umzug Erkennung erfolgt automatisch).

Um die Bühne nur die gelöschten Dateien:

for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done

oder (die xargs Fahrt):

git status | awk '/deleted/ {print $2}' | xargs git rm

Sie können alias Ihr bevorzugter Befehl für die bequeme spätere Verwendung eingestellt .

git rm test.txt

Vor oder nach der eigentlichen Datei gelöscht.

Durch die Verwendung von git-add mit ‚--all‘ oder ‚--update‘ Optionen, die Sie bekommen können mehr als Sie wollten. Neue und / oder geänderte Dateien werden auch in den Index aufgenommen werden. Ich habe einen Bash-Alias-Setup, wenn ich gelöschte Dateien von git entfernen will, ohne andere Dateien zu berühren:

alias grma='git ls-files --deleted -z | xargs -0 git rm'

Alle Dateien, die aus dem Dateisystem entfernt wurden, werden in den Index aufgenommen als gelöscht.

Nicht, dass es wirklich wichtig ist, aber ich nicht einverstanden mit der wählten Antwort:

git add -u 

... wird Entfernen von Dateien aus dem Index, wenn die entsprechenden Dateien im Arbeits Baum entfernt wurden, aber es wird auch die geänderten neuen Inhalte von Dateien aufgespürt Bühne.

git rm $(git ls-files --deleted)

... auf der anderen Seite nur die gelöschten Dateien rm, die verfolgt wurden.

So letzteres ist aus meiner Sicht die bessere Wahl.

Wenn das die einzigen Änderungen sind, können Sie einfach tun

git commit -a

alle Änderungen zu übernehmen. Das wird gelöschten Dateien enthalten.

git ls-files --deleted | xargs git rm 

ist die beste Option nur gelöschte Dateien hinzuzufügen.

Hier sind einige andere Optionen.

git add .  => Add all (tracked and modified)/new files in the working tree.

git add -u => Add all modified/removed files which are tracked.

git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree.

git commit -a -m "commit message" - Add and commit modified/removed files which are tracked.

git add -u

-u --aktualisieren Nur Match gegen bereits aufgespürte Dateien im Index eher als der Arbeits Baum. Das bedeutet, dass es nie neue Dateien inszenieren wird, aber das wird es geändert neue Inhalte getrackten Dateien Bühne und dass es Entfernen von Dateien aus dem Index, wenn die entsprechenden Dateien im Arbeits Baum entfernt wurden.

Wenn keine gegeben ist, standardmäßig auf „“; in anderen Worten, aktualisieren Sie alle verfolgten Dateien im aktuellen Verzeichnis und dessen Unterverzeichnissen.

Diese einfache Lösung funktioniert gut für mich:

git rm $(git ls-files --deleted)

Wenn Sie es zu Ihrem .gitconfig hinzuzufügen dies zu tun:

[alias]
  rma = !git ls-files --deleted -z | xargs -0 git rm

Dann alles, was Sie tun müssen, ist laufen:

git rma
git ls-files --deleted -z | xargs -0 git rm --cached

Damit werden alle gelöschten Dateien entfernen, die von git vorherigen verfolgt wurden, sowie den Fall behandeln, in denen Sie Ihre Dateinamen Leerzeichen in ihnen.

Je nach POSIX-Variante, müssen Sie möglicherweise xargs -0 -r verwenden. Diese xargs verursachen wird ordnungsgemäß beendet, wenn null Inhalt verrohrt

EDIT:. --cached und --deleted Fahnen im Tandem verwendet werden, versehentlich zu schützen gegen das Löschen von Dateien, die nicht bereits gelöscht

Versuchen Sie es.

-a
--all
Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.

git add . && git commit -m -a "Your commit"

oder

git add --all && git commit -m "Your commit"

Bitte verwenden Sie -t, um zu sehen, welcher Befehl tatsächlich ist sein ran

Ich zwickte nur Virender Antwort gleich zu tun:

git ls-files --deleted -z | xargs -t -0 git rm

Keines der flags zu git hinzufügen wird nur von der Bühne entfernt Dateien;wenn alle, die Sie geändert haben, sind Dateien gelöscht, dann bist du gut, aber sonst, Sie ausführen müssen, um den git-status und analysieren Sie die Ausgabe.

Arbeiten Sie von Jeremys Antwort, das ist, was ich habe:

git status |  sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
  1. Holen Sie sich den status der Dateien.
  2. Für gelöschte Dateien, isolieren Sie den Namen der Datei.
  3. Entfernen Sie alle Zeilen, die mit #beginnen s, sowie eine status-Zeile, hatte das Wort "gelöscht" in es;Ich kann mich nicht erinnern, was es war, genau, es ist nicht da nicht mehr, so dass Sie möglicherweise ändern müssen, um diese für verschiedene Situationen.Ich denke, Gruppierung von Ausdrücken könnte eine GNU-spezifische Funktion, so wenn Sie sind nicht mit gnutils, die Sie haben können, um mehrere grep -v Linien.
  4. Übergeben Sie die Dateien an git rm.

Kleben Sie diese in einem shell-alias nun...

Wie bereits erwähnt

git add -u

Stufen die entfernten Dateien zum Löschen, SONDERN AUCH geänderten Dateien für Update.

Um die geänderten Dateien unstage Sie tun können,

git reset HEAD <path>

Wenn Sie Ihre Commits gerne organisiert und sauber halten
. HINWEIS: auch Dies könnte die gelöschten Dateien unstage, also seien Sie vorsichtig mit diesen Platzhalter.

Im Folgenden wird funktionieren, auch wenn Sie viele Dateien zu verarbeiten haben:

git ls-files --deleted | xargs git rm

Sie werden wahrscheinlich auch mit einem Kommentar begehen wollen.

Weitere Informationen finden Sie unter: Nützliche Git Scripts

git commit -m 'commit msg' $(git ls-files --deleted)

Das ist für mich gearbeitet, nachdem ich hatte bereits die Dateien gelöscht.

brauchte ich die gleiche und verwendet git gui „Stufe geändert“ -Taste. es fügt auch alle.

Und nach "Stufe geändert" Ich habe "commit" ...

so mein Arbeitsverzeichnis ist wieder sauber.

Sie können mit git add -u <filenames> nur die gelöschten Dateien inszenieren.

Zum Beispiel, wenn Sie die Dateien templates/*.tpl gelöscht, dann git add -u templates/*.tpl verwenden.

Die -u ist erforderlich, um Dateien zu beziehen, die im Repository vorhanden, aber nicht mehr existieren im Arbeitsverzeichnis. Ansonsten ist die Standardeinstellung von git add für die Dateien im Arbeitsverzeichnis zu suchen, und wenn Sie Dateien angeben Sie es gelöscht haben, es wird sie nicht finden.

so etwas wie

git status | sed -s "s/^.*deleted: //" | xargs git rm 

kann es tun.

Hinzufügen von system-alias für die Inszenierung von gelöschten Dateien, die als Befehl rm-all

UNIX alias rm-all='git rm $(git ls-files --deleted)'

WINDOWS doskey rm-all=bash -c "git rm $(git ls-files --deleted)"

Hinweis

Windows muss haben bash installiert.

(Noch eine weitere Variation)

Ich wollte alle von den Plattendateien gelöscht die bereits löschen, aber aus einem bestimmten Ordner, die anderen Ordner unberührt bleiben. Folgende arbeitet für mich:

git ls-files --deleted  | grep <folder-name> | xargs git rm
git rm $(git ls-files -d)

Entfernt alle Dateien, die vom git ls-files Befehl (-d zeigen nur gelöschte Dateien) aufgeführt. Funktioniert nicht für Dateien mit Leerzeichen im Dateinamen oder Pfad, aber einfach zu merken

Für Visual Studio-Projekt

'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm' 

Dies ist hilfreich, wenn die gelöschte Datei Pfadraum hat

Die flexibelste Lösung, die ich bisher gefunden habe, ist zu

git cola

und wählen Sie alle gelöschten Dateien, die ich auf die Bühne wollen.

(Hinweis I in der Regel alles Command in git, aber git Griffen entfernte Dateien ein wenig umständlich).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top