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)
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.
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.
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.
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`
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.
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.
Ok, der Workaround ist aber denkbar einfach: vor dem nächsten Merge einfach den Revert nochmal reverten.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.