2016-11-30 6 views
1

Irgendwie habe ich ein wirklich großes lokales Repository, weil ich versehentlich über 2 GB Dateien hinzugefügt habe und ohne nachzudenken versucht habe, dies zu pushen. Ich abgebrochen, entfernt die Dateien und hat eine recommit, aber wenn ich zu git push origin master zu Bitbucket versuchen, es irgendwie:Git - Wie setze ich einen "Push" zurück

fatal: The remote end hung up unexpectedly 

Meine .git Datei immer noch sehr groß ist, obwohl ich seit langem die nicht mehr benötigte Dateien entfernt haben. Da der Push über 2 GB ist, sagt Bitbucket, dass ich die http.postBuffer auf eine höhere Nummer setzen muss. Ich habe das schon oft gemacht, aber nach ungefähr 15 Versuchen möchte ich einfach von vorne anfangen.

git status gibt mir dies:

On branch master 
Your branch is ahead of 'origin/master' by 4 commits. 
    (use "git push" to publish your local commits) 

Aber da die Push nie funktioniert, wie kann ich es beheben? Worst-Case-Szenario könnte ich einfach das Repo sprengen und neu erstellen, aber ich würde gerne wissen, ob es eine Möglichkeit gibt, den Push zurückzusetzen, da es immer wieder versagt.

+1

Wie haben Sie „die nicht benötigten Dateien entfernen“? Dies ist ein Versionskontrollsystem und es behält ältere Revisionen (einschließlich gelöschter Dateien). Sie müssen den Verlauf neu schreiben, um jeden Datensatz vollständig zu löschen (und dann wahrscheinlich Müll sammeln). – Thilo

+1

Mögliches Duplikat von [Wie entferne/lösche ich eine große Datei aus dem Commit-Verlauf im Git-Repository?] (Http://stackoverflow.com/questions/2100907/how-to-remove-delete-a-large-file-from- commit-history-in-git-repository) – Thilo

+0

Diese Frage kommt hier ziemlich oft vor, aber Sie können mit 'git filter-branch' oder' git-rebase -i' versuchen, diese bösen Commits zu entfernen. Tu dies sofort, damit sie nicht weiter begraben werden. –

Antwort

2

Die weigreen’s answer hilft, wenn der problematische Commit der neueste ist, in anderen Fällen müssen Sie rewrite the history. Ich würde eine interaktive Rebase bevorzugen.

git rebase -i <some-commit-before-the-problematic-one> 

Es wird die Liste der Commits zusammen mit der Standardaktion pick sie angezeigt werden wie sie sind. Wenn Sie einen Teil des problematischen Commits beibehalten möchten, ändern Sie in dieser Zeile in edit. Wenn Sie es lieber entfernen möchten, löschen Sie einfach die Zeile. Wenn Sie diesen Commit bearbeiten, wird Git den Arbeitsbaum in den Zustand versetzen, wie wenn Sie gerade den problematischen Commit durchgeführt haben. Ändern Sie, was Sie brauchen, und ändern die commit:

git commit --amend 

Danach lassen Git die rebase beenden mit

git rebase --continue 
+0

Das hätte am besten funktioniert. Am Ende habe ich einen harten Reset durchgeführt und dann den Push-Vorgang erzwungen. Ihre Lösung hätte besser funktioniert, hätte ich nicht schon einen Hard Reset durchgeführt.:( – Tensigh

+0

@Tensigh Bis Sie 'git gc' ausführen, können Sie immer noch auf die entfernten refs mit' git reflog' zugreifen. – Melebius

+0

Okay, danke. Nun, dass ich das sehe, wie roll ich zurück? – Tensigh

1

Sie können es tun, indem git reset

git reset --hard <commit-id> 

Sie verpflichten Nummer unter Verwendung bekommen git log

Sie alle Ihre Arbeit zwischen HEAD verlieren und verpflichten Sie ausgewählt

+1

Ich denke, eine interaktive Rebase wäre sinnvoller. Die Verwendung eines Rebases würde es ermöglichen, spätere Arbeiten beizubehalten. Sowohl die Rebase als auch Ihre Antwort würden die Geschichte der Branche neu schreiben, daher ist keine der beiden Methoden aus dieser Sicht besser. –

+0

Dies wird nichts zu anderen Zweigen oder Tags, die möglicherweise auch die großen Dateien enthalten. – Thilo

Verwandte Themen