Git Pull Request enthält fremde Commits

Vielleicht ist das euch auch schon mal passiert. Mir jedenfalls passiert das immer mal wieder mal. Ich checke in ein Branch ein um zum Beispiel ein Code Review vorzunehmen. Nachdem ich fertig bin, schnappe ich mir ein Ticket und eröffne einen neuen Feature Branche. Der eine oder andere ahnt bestimmt schon, worauf ich hinaus will? Richtig – ich habe meinen neuen Feature Branch aus einem Feature Branch eröffnet. In der Regel macht man aber das so nicht. Sondern man eröffnet meistens einen neuen Branch aus dem Master heraus. Es gibt Ausnahmen, dass so zu machen. Auf die Ausnahmen werde ich aber in diesem Artikel nicht näher eingehen. In den meisten Fällen führt aber der neu eröffnete Branch aus einem anderen Branch, zu Verwirrung. Spätestens beim Pull-Request.

So war es auch bei mir mit der Verwirrung. Nachdem ich meine Arbeiten an dem neuen Ticket vollendet habe commitete ich diese Änderungen und machte dann über die Konsole meinen push mit:

git push -u origin feature/xy-99
// oder
git push --set-upstream origin feature/xy-99 

Dann erhalte ich mein PR Link um diesen zu erstellen. Beim erstellen stelle ich dann mit schrecken fest. „Kacke! Da sind ja noch die Commits meines Kollegen drin.“ Wie gehen wir vor, bevor die Klugscheißer Kollegen auf Dein Pull-Request aufmerksam werden? Es gibt mehrere Möglichkeiten die Situation zu entspannen. Folgende Notfallbehandlung kann genutzt werden.

Folgendes Ausgangsszenario: (Ihr habt bereits ein PR für feature-99 gestellt und dort findet ihr die Commits des Kollegen)

Stack: Bitbucket

(local) git branch(remote) git branch
mastermaster
developmentdevelopment
feature-1feature-1
feature-2feature-2
feature-99feature-99*
* hier sind die Commits drin vom feature-2 Branch

Ein möglicher Lösungsansatz:

Wir löschen den PR über die UI (Bitbucket). Lokal wechseln wir auf den Master.

git checkout feature-99  
git log
// *schreibe dir die ersten 4 Zahlen deines Commits auf
Git checkout master
git branch -D/-d feature-99
git checkout -b feature-99
git cherry-pick "f12d*" // *die ersten vier Zahlen deines Commits
git push -u origin feature-99 –force
// dann erstellst Du wie gewohnt den Pull-Request 

Git branch -d
Das löschen eines Branches machst Du mit git branch -d <branch-name>. Falls der Branch Jungfreudig ist und noch nicht gemerged oder gepusht wurde, wir bei dem Flag -d („kleines d“) ein Git Error kommen. Git möchte dich somit bewahren, Deine commiteten Daten zu verlieren. Falls Du dir sicher bist, dass Du das willst, kannst Du den Branch mit -D „großes D“ löschen. Falls schon gemerged oder gepusht genügt das kleine D.

Git cherry-pick
Mit git cherry-pick kannst Du andere Commits anhand ihres Selektors (Commit ID) in deinen Branch holen. Das Prizip ist einwenig wie das git stashing zu verstehen. Cherry Pick setzt dir den anderen Commit einfach in dein Branch rein. Du musst nicht einmal adden und commiten. Git Status ist clean. Ich finde git Cherry Pick abgefahren und sehr nützlich. In unserem Fall holen wir uns unsere Änderungen in den neuen Branch.

Das war ein Weg nach Rom. Mich würde interessieren wie ihr das so macht. Schreibt mir einfach in den Kommentaren und ich werde drauf eingehen.


Leave a Comment

Your email address will not be published. Required fields are marked *

*

*

Empfholende Artikel


Git – Closing a Branch – Was soll das sein?

May 4, 2021

Wer mit Bitcucket arbeitet kennt den Terminus. Nach einem erfolgreichen Merge auf den Master kann der Branch mit einem Häckchen in einer Checkbox geschlossen werden. Unter den Kollegen ist man sich einig. Branch immer schließen. Bloß warum? Zuerst sollte erwähnt werden, dass es in Git kein explizietes Branch closen gibt. Man kann einen Branch aber […]

Git Commit Message Regeln

March 22, 2021

Lange Zeit war mir das auch nicht klar, dass es Regeln für Git Commit Messages gibt. Wie sinnvoll die Regeln sind erschließt sich spätestens dann wenn man in größeren Teams arbeitet. Diese 7 Regeln möchte ich euch hier kurz erklären. Die Regel hat der Softwareentwickler Chris Beams vor einiger Zeit erstellt und auf seinem Blog […]

HTML Boilerplate / Scaffold / Vorlage

February 13, 2021

Um schnell mal etwas auszuprobieren, kann es sein das man ein HTML Grundgerüst benötigt. Vielleicht geht es euch ähnlich wie mir. Ich bin faul uns suche dann im anderen Projekten schnell das Gerüst. Was aber immer mit nicht ganz ohne Aufwendung dann einzufügen ist. Man muss hier und dort noch was löschen bzw. korrigieren. Aus […]

Docker auf Ubuntu 18.04 installieren

February 13, 2021

Docker auf einem frischen Ubunto 18.04 installieren geht in wenigen Schritten. Mit frischem meine ich ein System wo noch keine ältere Dockerversion vorher lief. Wir holen jetzt paar Pakete die wir für die Docker Installation brauchen rein. Nun fügen wir den GPG Key/Schlüssel für das offizielle Docker Repository hinzu. (ist ein freies Kryptographiesystem) Jetzt fügen […]

Git – Neuen Branch verwerfen / löschen

February 10, 2021

Es kommt vor, dass man ein Feature für ein Projekt entwickeln soll und man zuerst ausprobiert was so geht. Ihr arbeitet an einem Remote Repository und entwickelt lokal. Dann schnell mal ein composer update und die composer.lock ist geändert. Ihr wollt am liebsten den ganzen Branch verwerfen und zum Step zurück wo ihr angefangen habt. […]

Tailwind CSS – Ein kurzer Einstieg

January 8, 2021

Seit Jahren nutze ich Bootstrap. Ich dachte nicht mal im Traum dran, dass es etwas Besseres im Punkto Websitedesign geben wird. Es ist einfach, praktisch und man kann relative schnell ansprechende bzw. aufgeräumtes Designs umsetzen. Allerdings hatte Bootstrap für mich immer einen bitteren Beigeschmack. Ein Gedanke den ich nie zulassen wollte. Und zwar: Bootstrap sieht […]