Frage Entfernen mehrerer Dateien aus einem Git Repo, die bereits von der Festplatte gelöscht wurden


Ich habe ein Git Repo, dass ich vier Dateien gelöscht habe rm (nicht  git rm), und mein Git-Status sieht so aus:

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

Wie entferne ich diese Dateien von Git, ohne manuell jede Datei wie folgt durchlaufen zu müssen:

git rm file1 file2 file3 file4

Im Idealfall suche ich nach etwas, das auf die gleiche Weise funktioniert git add . tut, wenn das möglich ist.


1227
2018-01-29 17:18


Ursprung


Antworten:


Für Git 1.x

$ git add -u

Dies weist git an, verfolgte Dateien automatisch zu staffeln - einschließlich des Löschens der zuvor verfolgten Dateien.

Für Git 2.0

Um deinen gesamten Arbeitsbaum zu inszenieren:

$ git add -u :/

Um nur den aktuellen Pfad zu inszenieren:

$ git add -u .

2205
2017-09-10 00:13



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

könnte sein, was du suchst .. es funktioniert für mich ..


1335
2018-02-28 20:21



Sie können verwenden

git add -u

Um die gelöschten Dateien dem Staging-Bereich hinzuzufügen, müssen Sie sie anschließend übernehmen

git commit -m "Deleted files manually"

725
2018-01-29 17:25



Wenn du einfach rennst:

git add -u

git aktualisiert seinen Index, um zu wissen, dass die Dateien, die Sie gelöscht haben, tatsächlich Teil des nächsten Commits sein sollten. Dann können Sie "git commit" ausführen, um diese Änderung zu überprüfen.

Oder, wenn Sie laufen:

git commit -a

Es wird automatisch diese Änderungen (und alle anderen) übernehmen und sie übernehmen.

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

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

354
2017-09-10 00:15



Du suchst wahrscheinlich nach A:

git add -A

Dies ist vergleichbar mit git add -u, fügt aber auch neue Dateien hinzu. Dies entspricht ungefähr dem von hg addremove Befehl (obwohl die Bewegungserkennung automatisch ist).


163
2018-01-29 18:10



Aufführen nur das gelöscht Dateien:

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

Oder (der Xargs Weg):

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

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


92
2017-11-26 10:34



git rm test.txt

Vor oder nach dem Löschen der eigentlichen Datei.


59
2017-09-10 00:13



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, wenn ich gelöschte Dateien von Git entfernen möchte, 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 dem Index als gelöscht hinzugefügt.


47
2018-01-31 04:50



Nicht dass es wirklich wichtig ist, aber ich stimme der Antwort nicht zu:

git add -u 

... wird Dateien aus dem Index entfernen, wenn die entsprechenden Dateien in der Arbeitsbaumstruktur entfernt wurden, aber es werden auch die geänderten neuen Inhalte der verfolgten Dateien in die Anzeige übernommen.

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

Auf der anderen Seite werden nur die gelöschten Dateien gefunden, die verfolgt wurden.

Letzteres ist meiner Meinung nach die bessere Option.


38
2018-04-09 11:24