1138 Stimmen

Wie entfernt man dauerhaft einige Commits aus einem entfernten Zweig?

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?

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

16voto

ted.strauss Punkte 3699

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

3 Stimmen

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?

1 Stimmen

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?

0 Stimmen

Das hat bei mir auch funktioniert.

12voto

jansmolders86 Punkte 4969

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 .

11 Stimmen

Es ist noch nicht zu spät. Könnte für Wanderer mit ähnlichen Problemen nützlich werden :)

0 Stimmen

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

7voto

Douglas.Sesar Punkte 3854

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.

0 Stimmen

Sehr einfach, und wen kümmert es schon, wenn Sie einen Ast mit toten Beinen haben? machen Sie einen neuen Ast und fertig!

2 Stimmen

Das ist eine wirklich ausgezeichnete Antwort. Ich bin froh, dass ich dies getan habe, anstatt mir die Übertragungen herauszupicken oder den entfernten Zweig zu manipulieren.

3voto

John Punkte 1

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.

1voto

pandorago Punkte 56
 git reset --soft commit_id
 git stash save "message"
 git reset --hard commit_id
 git stash apply stash stash@{0}
 git push --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