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 Branch master zu main umbennen

December 20, 2021

Zuerst benennen wir unser Master in Main lokal um: 2. Nun möchten wir auf unserem entferntem Repository das selbe tun. Ändert den master auf main in eurem entfernetem Repository (GitLab, GitHub etc.). Dann könnt ihr von lokal aus: den neuen branch bespielen. Um den master jetzt zu löschen folgendes eingeben: Ich persönlich fand es unnötig […]

Sprechblassen mit HTML und CSS bauen

November 22, 2021

Es kommt immer mal wieder vor, dass man eine Sprechblase zum Beispiel in einer Kommentarbox bauen muss. Wie war das gleich nochmal?!? Man kann sich ja nicht immer alles merken und es gibt im Netzt auch nützliche Generatoren für diese Fälle. Für Sprechblasen könnte man zum Beispiel diesen hier nehmen: https://www.html-code-generator.com/css/speech-bubble-generator . Mit ein paar […]

Table colspan und rowspan Generator

November 21, 2021

Komplizierte Konstrukte mit Tabellen abzubilden war eigentlich eine Dispziplinzwischen den Jahr 2000 und 2003 herum. Immer wieder kommen aber bei Stackoverflow Fragen auf, wie man solche oder solche Tabellen darstellt. Statt auf das coole und moderne Grid System zurückzugreifen wird noch mit Tabellen gearbeitet. Wie auch immer. Wer sich den Horror mit colspans und rowspan […]

Eine bestehende Datenbank auf einem Docker laufen lassen

November 11, 2021

Stellt euch vor ihr bekommt die undankbare Aufgabe ein altes WordPress Projekt zu upgraden. Das Projekt hinkt bereits zwei Major Releases hinterher. Das bedeutet ihr könnt nicht einfach im Produktivsystem ein upgrade vollziehen. Ihr müsst euch das Produsystem auf eure lokale Entwicklungsumgebung kopieren. Dafür eignet sich Docker ganz gut. Heute gehe ich davon aus, dass […]

Ein Git reset wieder rückgängig machen

November 8, 2021

Stellt euch vor. Ihr habt ein commit gemacht und wollt diesen aber wieder zurücksetzen. Quasi ein Rollback um eins zurück. Das macht ihr mit git reset HEAD~1. Nun sagt ihr: Ähh, doch lieber nicht… Um das wieder rückgängig zu machen könnt ihr mit git reset –hard commit_id_des_letzten_HEAD den reset Commit wieder rückgängig machen und ihr […]

Zwischen den Git Commits springen

November 2, 2021

Allgemein kann man zwischen den einzelnen Git Branches springen. Aber wie sieht es aus, wenn man zwischen einzelnen Commits innerhalb einer Branch springen will? Ein Fall wäre, man arbeitet an einem Feature. Ist immer Feature Branche ausgecheckt und setzt während der Entwicklung kleinere Commits ab. Dann kommt die Stelle wo man sagt, ok ich muss […]