Git ignoriert und verändert die Vergangenheit

8

Ich habe erst kürzlich eine Datei .gitignore hinzugefügt, um bestimmte Datendateien in einem Unterverzeichnis von mir zu ignorieren. Ich würde wirklich gern in der Zeit zurückgehen und sie auch von früheren Commits / Geschichte entfernen.

Wird das leicht erreicht? Wo / wie soll ich anfangen?

    
anonymous coward 22.07.2011, 19:52
quelle

4 Antworten

9

Dies wird ein zweistufiges Verfahren sein:

Führen Sie die .gitignore-Datei

ein

Damit dies funktioniert, müssen die frühen Commits Ihre .gitignore Datei haben. Also müssen Sie:

  1. Überprüfen Sie den Root-Commit: git checkout -b temp $(git rev-list HEAD | tail -1)
  2. Fügen Sie die Datei .gitignore hinzu.
  3. git commit --amend
  4. Setzen Sie alle vorhandenen Zweige auf "temp" zurück. Dies kann oder kann nicht nahtlos funktionieren, so dass Sie möglicherweise mit ihm herumspielen müssen, wenn Konflikte auftreten.
  5. Sehen Sie sich Ihren Arbeitszweig an und löschen Sie den temporären Zweig.

Geschichte umschreiben

Jetzt können Sie diese Dateien mit diesem Befehl automatisch aus allen Zweigen entfernen:

git filter-branch --tree-filter 'git clean -f -X' -- --all

Dadurch werden alle Zweige neu geschrieben, um ignorierte Dateien zu entfernen. Abhängig von der Größe Ihres Repository kann dies eine Weile dauern.

    
cdhowie 22.07.2011, 20:00
quelle
1

Siehe Entfernen der Datei aus jedem Commit Abschnitt. Es ist genau dein Fall.

Aber Vorsicht, denn diese Funktion ändert jedes Geschichtsumschreiben . Wenn Sie also ein öffentliches Repository haben und jemand damit arbeiten könnte, würde dies zu Problemen führen.

    
Ivan Danilov 22.07.2011 19:55
quelle
0

Betrachten Sie etwas wie unten mit filter-branch

%Vor%

Ссылка

    
manojlds 22.07.2011 19:55
quelle
0

git filter-branch ist eine mögliche Lösung. Stellen Sie sicher, dass Sie die Auswirkungen verstehen, bevor Sie sie nutzen, da die Änderungen permanent sind. Sie werden nicht in der Lage sein, Ihren gefilterten Zweig mit dem alten zusammenzuführen.

git Filter-Zweig --index-filter 'git rm --cached --ignore-unmatch Dateiname' HEAD

Vertausche den Dateinamen für die spezifische Datei, die du entfernen möchtest.

    
SoftArtisans 22.07.2011 19:58
quelle

Tags und Links