Datei aus dem lokalen Git-Repo permanent löschen

218 views
Skip to first unread message

Nesamuddin Saadat

unread,
Apr 4, 2014, 8:15:33 AM4/4/14
to cocoah...@googlegroups.com
Hallo allerseits,

ich habe versehentlich eine große Datei, die irgendwie in mein Projekt geraten war, commited.
Hiernach habe ich die Datei aus dem Projekt gelöscht u. noch mal commit gemacht.
Die Datei ist zwar gelöscht, aber noch in der History meines lokalen Repo noch drin.
Seit dem kann ich keinen push mehr machen. es kommt eine Fehlermeldung, "remote: error: GH001: Large files detected usw...

Ich habe nicht so viel Erfahrung mit Github.
Kann mir jemand bitte sagen, wie ich dies in meinem lokalen Repo wieder permanent löschen kann?

Viele Grüße

Nesam

--



jemix GmbH

Office Hamburg:
Wandsbeker Chaussee 43-45
22089 Hamburg

fon +49 (0)40 899 55 999 0
fax +49 (0)40 899 55 999 2

Office Berlin:
Wittelsbacherstr. 7 
10707 Berlin

fax +49 (0)30 88 71 02 32

--
mailto:nsaa...@jemix.de
http://www.jemix.de - smart computer services


Die Übertragung von IT-Aufgaben an einen externen Dienstleister ist Vertrauenssache. 
Vertrauen beruht auf persönlicher und individueller Betreuung, Qualität und Nachhaltigkeit. 

Dies bestätigen uns unsere Kunden Tag für Tag.


Pascal Friederich

unread,
Apr 4, 2014, 8:18:36 AM4/4/14
to cocoah...@googlegroups.com
git filter-branch -f --index-filter "git rm -r --cached <NAME DES FILES> --ignore-unmatch" --prune-empty --tag-name-filter cat -- --all

Alternativ also einfach git extras installieren und "git obliterate FILENAME" aufrufen




--
Sie erhalten diese Nachricht, weil Sie in Google Groups E-Mails von der Gruppe "Cocoaheads Hamburg" abonniert haben.
Wenn Sie sich von dieser Gruppe abmelden und keine E-Mails mehr von dieser Gruppe erhalten möchten, senden Sie eine E-Mail an cocoaheads-h...@googlegroups.com.
Wenn Sie in dieser Gruppe einen Beitrag posten möchten, senden Sie eine E-Mail an cocoah...@googlegroups.com.
Gruppe besuchen: http://groups.google.com/group/cocoaheads-hh
Weitere Optionen finden Sie unter https://groups.google.com/d/optout.

Rainer Schmid

unread,
Apr 4, 2014, 8:26:18 AM4/4/14
to cocoah...@googlegroups.com
Hallo,

> ich habe versehentlich eine große Datei, die irgendwie in mein
> Projekt
> geraten war, commited.
> Hiernach habe ich die Datei aus dem Projekt gelöscht u. noch mal
> commit
> gemacht.
> Die Datei ist zwar gelöscht, aber noch in der History meines lokalen
> Repo
> noch drin.
> Seit dem kann ich keinen push mehr machen. es kommt eine
> Fehlermeldung,
> "remote: error: GH001: Large files detected usw...
>
> Ich habe nicht so viel Erfahrung mit Github.
> Kann mir jemand bitte sagen, wie ich dies in meinem lokalen Repo
> wieder
> permanent löschen kann?

Du musst wohl die beiden Commits (das Hinzufügen und das Löschen) aus
der lokalen Git-Historie rauskriegen. Sollte mit git reset gehen.


http://git-scm.com/book/de/Git-Grundlagen-Änderungen-rückgängig-machen

Wenn Du keine anderen lokalen Änderungen hast, könnte

git reset origin/master

oder

git reset --hard origin/master

(wenn Du im master-Branch bist) das gewünschte Resultat erzielen.
Vorsicht aber, mit git reset kannst Du auch ganz schnell deine lokalen
Änderungen komplett verlieren.

Alternativ könntest Du auch ein interactive rebase machen. Wenn die
beiden Commits direkt nacheinander waren, machst Du einfach

git rebase --interactive HEAD~2

Im Editor der dann aufgeht, änderst Du das "pick" für den zweiten
Commit einfach zu "f". Dann sollten der Commit, der die Datei
hinzugefügt hat under der, der die Datei wieder gelöscht hat zu einem
Commit zusammengeführt werden.

Liebe Grüße,

Rainer

Rainer Schmid

unread,
Apr 4, 2014, 8:28:54 AM4/4/14
to cocoah...@googlegroups.com
> [...]
> Alternativ könntest Du auch ein interactive rebase machen. Wenn die
> beiden Commits direkt nacheinander waren, machst Du einfach
>
> git rebase --interactive HEAD~2
>
> Im Editor der dann aufgeht, änderst Du das "pick" für den zweiten
> Commit einfach zu "f". Dann sollten der Commit, der die Datei
> hinzugefügt hat under der, der die Datei wieder gelöscht hat zu
> einem Commit zusammengeführt werden.

Ach Quatsch, geht noch einfacher, wenn der Commit, der die Datei
hinzugefügt hat, sonst nichts beinhaltet. Dann einfach

git rebase --interactive HEAD~3

machen und die Zeilen für die beiden Commits (das Hinzufügen und das
Löschen) einfach löschen.

Liebe Grüße,

Rainer Schmid

Nesamuddin Saadat

unread,
Apr 4, 2014, 10:32:43 AM4/4/14
to cocoah...@googlegroups.com
Hallo, vielen Dank für eure Antworten.
Es existieren commits sowohl vor als auch nach diesen commits mit der großen Datei, die ich nicht gepusht habe.
Vielleicht ist es jetzt ein bisschen klarer, wie die Situation liegt.
Ich möchte gern einen Zustand erreichen, dass diese Datei aus der History entfernt wird, damit ich meine übrige Änderungen pushen kann.

Danke für eure Tipps
Nesam



--
Sie erhalten diese Nachricht, weil Sie Mitglied der Google Groups-Gruppe "Cocoaheads Hamburg" sind.

Wenn Sie sich von dieser Gruppe abmelden und keine E-Mails mehr von dieser Gruppe erhalten möchten, senden Sie eine E-Mail an cocoaheads-hh+unsubscribe@googlegroups.com.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an cocoah...@googlegroups.com.
Gruppe besuchen: http://groups.google.com/group/cocoaheads-hh
Weitere Optionen: https://groups.google.com/d/optout

Rainer Schmid

unread,
Apr 4, 2014, 10:47:41 AM4/4/14
to cocoah...@googlegroups.com
Hallo,

> Hallo, vielen Dank für eure Antworten.
> Es existieren commits sowohl vor als auch nach diesen commits mit der
> großen Datei, die ich nicht gepusht habe.
> Vielleicht ist es jetzt ein bisschen klarer, wie die Situation liegt.
> Ich möchte gern einen Zustand erreichen, dass diese Datei aus der
> History
> entfernt wird, damit ich meine übrige Änderungen pushen kann.

Da fallen mir zwei Möglichkeiten ein:

1. Wenn das Hinzufügen vor 10 Commits geschehen ist, einfach

git rebase --interactive HEAD~10

eingeben. Der Editor zeigt dann die letzten 10 Commits. Daraus kann man
dann die Zeilen für die beiden Commits löschen, bei denen die Datei
hinzugefügt und entfernt wurde.

2. Annahme: wir sind auf dem master Branch (bei anderen Branches halt
einfach master ersetzen).

Vom lokalen master branch einfach einen lokalen Branch erzeugen. Dann im
master branch ein reset machen, etwa

git reset --hard origin/master

(oder so ähnlich; bei reset bin ich mir nie ganz sicher über das
Verhalten). Jetzt sollte der lokale master Branch mit dem remote master
Branch wieder synchron sein. Jetzt kannst Du die Änderungen, die Du in
master haben willst einfach mittels git cherry-pick in den master Branch
picken.

Liebe Grüße,

Rainer

daf...@gmail.com

unread,
Apr 4, 2014, 10:57:53 AM4/4/14
to cocoah...@googlegroups.com
Auch wenn es keine direkte Hilfe für dieses Problem ist, kann ich nur empfehlen http://pcottle.github.io/learnGitBranching/ mal durchzuspielen… danach versteht man git etwas besser.

Gruß
  Bastian


Nesamuddin Saadat

unread,
Apr 7, 2014, 5:24:32 AM4/7/14
to cocoah...@googlegroups.com
Hallo,

vielen Dank für Eure Tipps.
Ich habe mit git rebase -interactive HEAD~10 ausgeführt. Das Terminal hat mir die 10 commits aufgelistet. Und zudem eine Liste der Optionen wie -s, -e usw....
Ich habe auch die beiden fraglichen commits gefunden. Kann ich diese Zeilen einfach im Terminal löschen od. muss ich das ganze in einem Editor öffnen u. nachdem ich diese Zeilen gelöscht habe, die Datei einfach schließen.
Außdem ist mir aufgefallen, dass ich nach dem command git rebase.. nicht ohne weiteres in Insert-Modus komme, um eine dieser Optionen auszuwählen od. gar das comman beenden.

Danke u. Gruß
Nesam


--
Sie erhalten diese Nachricht, weil Sie Mitglied der Google Groups-Gruppe "Cocoaheads Hamburg" sind.
Wenn Sie sich von dieser Gruppe abmelden und keine E-Mails mehr von dieser Gruppe erhalten möchten, senden Sie eine E-Mail an cocoaheads-hh+unsubscribe@googlegroups.com.
Wenn Sie Nachrichten in dieser Gruppe posten möchten, senden Sie eine E-Mail an cocoah...@googlegroups.com.
Gruppe besuchen: http://groups.google.com/group/cocoaheads-hh
Weitere Optionen: https://groups.google.com/d/optout

Daniel Demiss

unread,
Apr 8, 2014, 3:17:41 AM4/8/14
to cocoah...@googlegroups.com
Für alles, was jetzt folgt, empfehle ich Dir, erstmal eine Trockenübung zu machen:
Mach von dem Branch, auf dem Du gerade sitzt, einen neuen Branch z.B. „Rebase-Test-Drive“ und führe die Schritte dort aus. Wenn alles gut gegangen ist, kannst Du den eigentlichen Branch entsprechend umbiegen, wenn nicht kannst Du zumindest wieder in deinen jetzigen Zustand zurück, wenn Du etwas falsch machst, denn:

git rebase --interactive ist eine Zeitmaschine—und Du möchtest nicht wirklich ausversehen verhindern, daß Deine Urgroßeltern sich kennenlernen…

Auf geht’s!

Git verwendet bei Kommandos die weitere Eingaben erfordern immer den default Editor.
Wenn man den nie angepasst hat ist das „vim“—ich hab den bei mir auf „nano“ geändert…

Das Löschen der beiden Zeilen kann ich nur unter einer Bedingung empfehlen:
Der jeweilige commit macht nichts anderes als die Datei hinzuzufügen bzw. zu löschen.

Da Du ja sagtest, Du habest die Datei versehentlich hinzugefügt, halte ich das im Falle des ersten commits für extrem unwahrscheinlich!
Stattdessen solltest Du in der ersten Zeile „pick“ gegen „edit“ ersetzen. Bei der Löschung sieht das ähnlich aus: Zeile nur dann löschen, wenn dort nichts anderes passiert ist, sonst „pick“ gegen „edit“ austauschen.
Anschließend kannst Du dem Editor sagen, er soll die aktuelle Datei speichern und beenden, und Du kannst dem ersten den commit „ammend“en und dabei die Datei entfernen.

Wenn du mit dem ammend fertig bist, (wird durch erneutes commit abgeschlossen) kannst Du den Rebase fortsetzen—von diesem Moment an ist es, als wäre die Datei niemals im Repository gewesen. Jede Aktion, welche die unliebsame Datei einbezieht, würde im Konflikt mit dieser stehen.
Deswegen mußt Du auch den zweiten commit, in dem Du ursprünglich die Datei löschen wolltest, bearbeiten (oder eben ganz entfernen—was passiert, wenn Du die Zeile am Anfang komplett löschst).

Solltest Du diesen zweiten commit auch bearbeiten müssen, geht das wie oben für den ersten beschrieben: „ammenden“, commiten, git rebase --continue.

Grüßle

Daniel
Sie erhalten diese Nachricht, weil Sie in Google Groups E-Mails von der Gruppe "Cocoaheads Hamburg" abonniert haben.
Wenn Sie sich von dieser Gruppe abmelden und keine E-Mails mehr von dieser Gruppe erhalten möchten, senden Sie eine E-Mail an cocoaheads-h...@googlegroups.com.
Wenn Sie in dieser Gruppe einen Beitrag posten möchten, senden Sie eine E-Mail an cocoah...@googlegroups.com.
Gruppe besuchen: http://groups.google.com/group/cocoaheads-hh

Nesamuddin Saadat

unread,
Apr 16, 2014, 9:31:35 AM4/16/14
to cocoah...@googlegroups.com
Hallo Daniel,

endlich bin ich dazu gekommen, die unerwünschten Dateien aus meinem lokalen Repo durch git rebase -i zu entfernen.
Hier habe ich zuerst, wie Du vorgeslagen hast, einen Branch von meinem Reop erstellt u. darauf git rebase -i ausgeführt.

Die beiden Dateien habe ich im Editior einfach gelöscht, weil ich wußte, dass diese Commits nur die Datei hinzugefügt bzw. entfernt haben.
Weiter mit git rebase continue...
Nach einigen Meldungen wie could not apply the file...bin ich mit git rebase --skip od. git rebase --continue weiter gegangen bis zum letzten Commit.

Jetzt habe eine Fehlermeldung can not lock file.. head ist at.. but expected to be...
Ich habe viel in den Foren nachgesucht, konnte aber keine überzeugende Lösung finden.

Hast Du eine Idee?

Gruß u. Danke an Euch alle für Eure tatkräftige Hilfe.
Nesam


http://www.jemix.de - smart computer services

Reply all
Reply to author
Forward
0 new messages