Forum: PC-Programmierung gemerter commit rückgängig machen


von felix (Gast)


Lesenswert?

Hallo,

mein Projektleiter hat einen push von mir ins repo gemergt (obwohl er es 
gar nicht machen durfte und in der commit-message drinne stand, dass 
dieser nicht gemergt werden soll (heul heul :) )  ).
gibt es jetzt einen ordentlichen weg um das wieder zu reverten?
Also zur not könnte ich den vorigen stand wieder herstellen und dann 
direkt auf dem master mit force pushen. Dann wären aber in der historie 
zwei kommmits. Diese wären auch nciht direkt hintereinander, sondern 
dazwischen wären noch zwei andere kommits.
Gibt es eine anderen möglichkeit einen bestimmten merge rückgängig zu 
machen? Also beim pushen geht es mein ich mit revert (obwohl das bei mir 
auch nicht so wirklihc funktioniert hat. mag aber an mir liegen)

von Walter T. (nicolas)


Lesenswert?

CVS oder Doors?

von felix (Gast)


Lesenswert?

Walter T. schrieb:
> CVS oder Doors?

??
Git

von Jemand (Gast)


Lesenswert?

Mit interactive rebase den Commit entfernen, dann force-push. Alles was 
force-push benötigt ist natürlich für andere Teilnehmer nicht so schön.

von Sven B. (scummos)


Lesenswert?

felix schrieb:
> Also zur not könnte ich den vorigen stand wieder herstellen und dann
> direkt auf dem master mit force pushen. Dann wären aber in der historie
> zwei kommmits.

Nö.

Entweder du erstellst mit git revert einen Commit, der die Änderungen 
rückgängig macht. Das wäre die normale Lösung.

Falls du spezielle Gründe hast aus denen du das nicht willst, kannst du 
den Commit auch aus der History entfernen (mit force push). Die 
einfachste Lösung das zu erreichen ist vermutlich, ein reset --hard auf 
den Stand vor dem Merge zu machen, und dann alle Commits die danach 
kamen die du behalten möchtest zu cherry-picken. Dasselbe lässt sich 
auch mit git rebase -i erreichen.

von Imonbln (Gast)


Lesenswert?

Sven B. schrieb:
> Entweder du erstellst mit git revert einen Commit, der die Änderungen
> rückgängig macht. Das wäre die normale Lösung.

Einen Merge zu reverten Funktioniert aber nur so mittel prächtig in git.

von jan (Gast)


Lesenswert?

Du gehst mit `git reset --hard <mergeCommit>~` bis einen commit vor den 
merge, vorsicht, löscht alle lokalen Änderungen. Und pass auf, dass du 
in dem branch bist, der gemergt wurde, nicht in dem branch in den 
gemergt wurde (z.B. master oder develop).

Damit ist der merge Geschichte. Veröffentlichen kannst du nur per `push 
--force-with-lease`

von Sven B. (scummos)


Lesenswert?

Imonbln schrieb:
> Sven B. schrieb:
>> Entweder du erstellst mit git revert einen Commit, der die Änderungen
>> rückgängig macht. Das wäre die normale Lösung.
>
> Einen Merge zu reverten Funktioniert aber nur so mittel prächtig in git.

Funktioniert genausogut wie jeden anderen Commit zu reverten.

von imonbln (Gast)


Lesenswert?

Sven B. schrieb:
> Imonbln schrieb:
>> Einen Merge zu reverten Funktioniert aber nur so mittel prächtig in git.
>
> Funktioniert genausogut wie jeden anderen Commit zu reverten.

nicht ganz siehe:
https://mirrors.edge.kernel.org/pub/software/scm/git/docs/git-revert.html
und
https://mirrors.edge.kernel.org/pub/software/scm/git/docs/howto/revert-a-faulty-merge.html

> Reverting a merge commit declares that you will never want the tree
> changes brought in by the merge. As a result, later merges will only
> bring in tree changes introduced by commits that are not ancestors of the
> previously reverted merge. This may or may not be what you want.

von Sven B. (scummos)


Lesenswert?

Ok, der Workaround ist aber denkbar einfach: vor dem nächsten Merge 
einfach den Revert nochmal reverten.

von jan (Gast)


Lesenswert?

Sieht aber kacke aus :D Wenn er push --force machen darf weil das Repo 
nur von ihm oder ganz wenigen benutzt wird kann er es doch machen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.