900 Stimmen

Den aktuellen Commit zum einzigen (ersten) Commit in einem Git-Repository machen?

Ich habe derzeit ein lokales Git-Repository, das ich in ein Github-Repository verschiebe.

Das lokale Repository hat ~10 Commits, und das Github-Repository ist ein synchronisiertes Duplikat davon.

Ich möchte den gesamten Versionsverlauf aus dem lokalen Git-Repository entfernen, so dass der aktuelle Inhalt des Repositorys als einzige Übergabe erscheint (und daher ältere Versionen von Dateien innerhalb des Repositorys nicht gespeichert werden).

Ich würde diese Änderungen dann gerne auf Github veröffentlichen.

Ich habe Git rebase untersucht, aber das scheint eher geeignet zu sein, bestimmte Versionen zu entfernen. Eine andere mögliche Lösung besteht darin, das lokale Projektarchiv zu löschen und ein neues zu erstellen - allerdings würde dies wahrscheinlich eine Menge Arbeit verursachen!

ETA: Es gibt bestimmte Verzeichnisse/Dateien, die nicht aufgespürt werden - wenn möglich, würde ich gerne die Aufspürung dieser Dateien beibehalten.

-1voto

kkarki Punkte 1

Verwenden Sie dazu den Befehl Shallow Clone git clone --depth 1 URL - Es wird nur der aktuelle HEAD des Repositorys geklont

-3voto

kiriloff Punkte 24291

Um die letzte Übertragung aus Git zu entfernen, können Sie einfach Folgendes ausführen

git reset --hard HEAD^ 

Wenn Sie mehrere Übertragungen von oben entfernen, können Sie Folgendes ausführen

git reset --hard HEAD~2 

um die letzten beiden Commits zu entfernen. Sie können die Zahl erhöhen, um noch mehr Commits zu entfernen.

Mehr Informationen hier.

Git tutoturial hier bietet Hilfe zum Bereinigen des Repositorys:

Sie wollen die Datei aus der Historie entfernen und sie in die .gitignore hinzufügen, um sicherzustellen, dass sie nicht versehentlich erneut übertragen wird. Für unsere Beispiele werden wir Rakefile aus dem GitHub gem-Repository entfernen.

git clone https://github.com/defunkt/github-gem.git

cd github-gem

git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch Rakefile' \
  --prune-empty --tag-name-filter cat -- --all

Nachdem wir nun die Datei aus dem Verlauf gelöscht haben, müssen wir sicherstellen, dass wir dass wir sie nicht versehentlich erneut übertragen.

echo "Rakefile" >> .gitignore

git add .gitignore

git commit -m "Add Rakefile to .gitignore"

Wenn Sie mit dem Zustand des Repositorys zufrieden sind, müssen Sie die Änderungen erzwingen, um das entfernte Repository zu überschreiben.

git push origin master --force

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X