Git Rebase mit Sourcetree

83

Ich glaube, ich bin verwirrt darüber, wie man die SourceTree-Benutzeroberfläche für die Git-Rebase verwendet. Ich habe zwei Zweige "Master" und "Dev". Wie zu sehen war, gingen die beiden Zweige auseinander. Ich möchte eine Rebase für den Zweig "dev" über die Befehlszeile durchführen. Dies wäre:

git checkout dev
git rebase master

Geben Sie hier die Bildbeschreibung ein

Ich hätte erwartet, mit der rechten Maustaste auf "dev" zu klicken und "Aktuelle Änderungen auf dev neu erstellen" zu wählen. Ich gehe davon aus, dass aktuelle Änderungen "neue Commits auf dem Master" bedeuten. Die Auswahl dieser Option scheint jedoch keinerlei Auswirkungen zu haben. Was wären die richtigen Schritte?

python152
quelle

Antworten:

117

Die Auswahl dieser Option scheint jedoch keinerlei Auswirkungen zu haben.

Ja, da die aktuellen Änderungen einer der aktuellen Zweige sind dev.

Rebasing devauf devbedeutet ein No-Op.

git checkout dev
git rebase master

Das heißt: aktueller Zweig ist dev: neu aufgebaut werden auf master.

In SourceTree müssen Sie also mit der rechten Maustaste auf klicken master(während deves ausgecheckt ist) und Folgendes auswählen:

Rebase current changes onto master

Howe fügt in den Kommentaren hinzu :

Die aktuelle Benennung von " rebase current changes onto [branch]" ist irreführend. Schauen Sie sich diese Verbesserungsdiskussion anSRCTREE-1578 .

Nachdem ich verblüfft war, einen Feature-Zweig mit der Entwicklung auf den neuesten Stand zu bringen, und dies fehlschlug, wurde mir klar, dass der Kontextmenüpunkt im linken Bereich mit der Bezeichnung " rebase current changes onto $somebranch" tatsächlich das Gegenteil von dem bewirkt, was sein Name andeutet:
Er stützt den aktuellen Zweig neu an den Staat $ somebranch;
Mit anderen Worten, es wird $somebranchauf den aktuellen Zweig (oder in diesen) zurückgesetzt, nicht umgekehrt. (Richtig?)

Die Präposition " onto" im aktuellen Text ist irreführend; Dies bedeutet, dass das Objekt des Satzes ( $somebranchin meinem Beispiel) die Änderungen erhält.
In der Tat ist es das Gegenteil, das eintreten wird.
Das Fehlen des Namens der aktuellen Niederlassung trägt zur Verwirrung bei.

Eine Neuformulierung, die die Satzstruktur verbessert und den Namen des betroffenen Zweigs enthält, würde einen großen Gewinn für die Klarheit bringen.
Zum Beispiel:

rebase $currentbranch to head of $somebranch
rebase $somebranch onto $currentbranch
VonC
quelle
13
Für Zusammenhang ist die von Downvote Totmann , die Beiträge geschrieben früher eine Antwort ohne SourceTree überhaupt Adressierung. Ich habe meine Kritik in einem Kommentar abgelehnt und erklärt. Anscheinend schätzte Deadman die konstruktiven Bemerkungen, die ich machte, nicht.
VonC
1
Wird das den Hauptzweig verändern? Ich möchte nur meinen Entwicklungszweig mit den neuesten Änderungen des Hauptzweigs aktualisieren - und später meinen Entwicklungszweig mit dem Master zusammenführen. Wird der beschriebene Weg diese Aufgabe erledigen?
Gerfried
2
@ Gerfried Einverstanden. Solange dev nicht gepusht wurde, können Sie auf Master zurücksetzen.
VonC
14
Sourcetree sollte den Wortlaut zur besseren Verdeutlichung in "Neueste Änderungen vom Master in Dev umwandeln" ändern.
Timo
3
Die aktuelle Benennung von "Rebase Current Changes on [Branch]" ist irreführend. Schauen Sie sich diese Verbesserungsdiskussion an: jira.atlassian.com/browse/SRCTREE-1578 .
Zihao Zhao