Ich weiß, dass das eine Umschreibung der Geschichte ist, die schlecht ist, bla bla bla.
Aber wie kann man einige Commits dauerhaft aus dem entfernten Zweig entfernen?
Ich weiß, dass das eine Umschreibung der Geschichte ist, die schlecht ist, bla bla bla.
Aber wie kann man einige Commits dauerhaft aus dem entfernten Zweig entfernen?
Eine Vereinfachung der Antwort von pctroll, die ebenfalls auf dieser Grundlage beruht Blogbeitrag .
# look up the commit id in git log or on github, e.g. 42480f3, then do
git checkout master
git checkout your_branch
git revert 42480f3
# a text editor will open, close it with ctrl+x (editor dependent)
git push origin your_branch
# or replace origin with your remote
Funktioniert bei mir, danke. Und ich möchte dauerhaft eine Übergabe (z. B. enthält pwd) von Remote-Zweig Geschichte zu löschen, wie dies tun?
Funktioniert bei mir auch, aber ich habe dieselbe Frage wie Smiles: Ich möchte nicht, dass jemand meine Übertragungen in der Historie sieht, wie kann ich das entfernen?
Das mag vielleicht zu wenig sein, aber was mir geholfen hat, ist die cool klingende Option "nuclear". Im Grunde verwendet man den Befehl filter-branch
können Sie Dateien entfernen oder etwas an einer großen Anzahl von Dateien in Ihrer gesamten Git-Historie ändern.
Dies lässt sich am besten erklären ici .
Es ist noch nicht zu spät. Könnte für Wanderer mit ähnlichen Problemen nützlich werden :)
Das hat mir geholfen, allerdings rät die offizielle Git-Doku jetzt von der Verwendung von filter-branch
zugunsten von github.com/newren/git-filter-repo
Manchmal ist der einfachste Weg, dieses Problem zu beheben, einen neuen Zweig von der Stelle aus zu erstellen, von der Sie wissen, dass der Code gut ist. Dann können Sie den fehlerhaften Zweig in Ruhe lassen, für den Fall, dass Sie später andere Übertragungen aus diesem Zweig auswählen müssen. Dies stellt auch sicher, dass Sie keinen Commit-Verlauf verloren haben.
Von Ihrer örtlichen Zweigstelle:
git log
Kopieren Sie den Commit-Hash, an dem der Zweig stehen soll, und verlassen Sie das Git-Protokoll
git checkout theHashYouJustCopied
git checkout -b your_new_awesome_branch
Jetzt haben Sie einen neuen Zweig, der genau Ihren Vorstellungen entspricht.
Wenn Sie einen bestimmten Commit aus dem fehlerhaften Zweig behalten wollen, der sich nicht in Ihrem neuen Zweig befindet, können Sie sich diesen Commit einfach herauspicken, den Sie benötigen:
git checkout the_errant_branch
git log
Kopieren Sie den Commit-Hash des einen Commits, den Sie in den guten Zweig ziehen wollen, und beenden Sie das Git-Protokoll.
git checkout your_new_awesome_branch
git cherry-pick theHashYouJustCopied
Klopfen Sie sich selbst auf die Schulter.
Sehr einfach, und wen kümmert es schon, wenn Sie einen Ast mit toten Beinen haben? machen Sie einen neuen Ast und fertig!
Ich verwende dazu gerne rebase. Unten steht n für die letzten n Commits. Wenn Sie also den dritten Commit löschen wollen, ersetzen Sie n durch 3.
git rebase -i HEAD~n
Suchen Sie dann die gewünschte Übergabe in der Liste und ändern Sie sie von "pick" in "drop". Beenden Sie das rebase und verwenden Sie git push mit der Option "-f", als hätten Sie gerade ein rebase durchgeführt.
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.
169 Stimmen
Ja, es ist wirklich schlimm und so weiter, aber aus irgendeinem Grund muss ich es mögen.
123 Stimmen
Ich weiß, dass das dumm ist, aber manchmal passiert so etwas - wie das Testen von Logins und die Verwendung von Klartextpasswörtern in Ihrem Code, die echte Anmeldedaten sind. Und schwupps...
7 Stimmen
Echte Anmeldedaten Ja, erinnert mich an ein paar Whoopos
1 Stimmen
Mögliches Duplikat von Löschen von Übertragungen aus einem Zweig in Git
1 Stimmen
Tun Sie das nicht, es wird zu Konflikten mit allen anderen Entwicklern führen.
6 Stimmen
@RajatVerma Es wird keinen Konflikt geben, wenn Sie der einzige Entwickler sind. Zur Hölle, selbst mit 2-3 Entwicklern, wenn sie alle im selben Raum sind, kann man es leicht lösen.
79 Stimmen
Ich bin dieses akademische Gerede darüber, wie gefährlich das ist und dass man es nie tun sollte, so leid. Es gibt Zeiten, in denen es viel, viel besser ist, Sachen aus der Git-History zu entfernen und sich mit den Konflikten/Brüchen anderer Entwickler auseinanderzusetzen. Es ist wirklich so einfach. Leute, die das ignorieren, haben wahrscheinlich nie außerhalb eines Klassenzimmers gearbeitet.
0 Stimmen
@crush in meinem Fall - schob eine ~100 Mb große Asset-Datei vor, die sich als unnötig erwies
11 Stimmen
@crush Meistens ist es so, dass diese "intelligenten" Menschen nicht alle möglichen Fälle in Betracht ziehen und ihnen die Perspektive fehlt, weil sie etwas wiederholen, ohne über einen möglichen Fall nachzudenken, den sie überhaupt nicht in Betracht ziehen. Manchmal müssen Regeln gebrochen werden. Das erinnert mich an Grammatik-Nazis.
4 Stimmen
Ich habe gerade Code mit Produktionsdatenbank-Passwort in plain. Andernfalls muss ich das Datenbankpasswort ändern, was zu Verbindungsproblemen bei mehreren Diensten führt, da sie alle dieselbe Datenbank mit denselben Anmeldeinformationen verwenden. Ich weiß, das ist auch schlechte Praxis, aber es funktioniert und es ist mir egal.
0 Stimmen
Wenn Sie versehentlich echte Anmeldeinformationen übertragen, müssen Sie davon ausgehen, dass jemand sie gesehen hat, bevor Sie die Übertragungen entfernen konnten, und Sie müssen diese Anmeldeinformationen ohnehin ändern. (Einige unflexible Richtlinien können natürlich verlangen, dass Sie sie trotzdem entfernen).