Rebasierung einen Zweig einschließlich all seiner Kinder
Habe ich Folgendes Git-repository Topologie:
A-B-F (master)
\ D (feature-a)
\ /
C (feature)
\
E (feature-b)
Durch rebasierung feature
Zweig erwartete ich Stellungswechsel der gesamte Teilbaum (einschließlich der untergeordneten Zweige):
$ git rebase feature master
A-B-F (master)
\ D (feature-a)
\ /
C (feature)
\
E (feature-b)
Dies ist jedoch das eigentliche Ergebnis:
C' (feature)
/
A-B-F (master)
\ D (feature-a)
\ /
C
\
E (feature-b)
Ich weiß, ich kann leicht zu beheben manuell durch ausführen von:
$ git rebase --onto feature C feature-a
$ git rebase --onto feature C feature-b
Aber gibt es eine Möglichkeit, automatisch Stellungswechsel Zweig einschließlich all Ihrer Kinder/Nachkommen?
- Siehe auch wie würde ich Stellungswechsel eine ganze subhistory-mehrere Zweige, mit einigen verbindungen zwischen Ihnen, die aus merge. Der unangenehme Teil der Lösung ist das zurücksetzen der topic branch refs für die neue zurückgesetzt begeht danach.
- vielen Dank für die Erwähnung der --auf die option für git rebase - es löste mein Problem
- Sollte nicht
$ git rebase feature master
werden$ git rebase master feature
? - Mögliche Duplikate von Git rebase Teilbaum
Du musst angemeldet sein, um einen Kommentar abzugeben.
xargs
durch hinzufügen-n 1
zu zwingengit rebase
wird jedes mal ausgeführt, wenn für jeden Zweig. Ich ließ mich Bearbeiten Sie Ihre Antwort. Auch ich verwendetC
eher alsC^
ich bin nicht sicher, warum Sie über die letztere form. Trotzdem großen Dank, es ist genau das, was ich suchte.| grep -v '\*'
vor der übergabe an xargs. Jedoch, da rebase ist auch eine Porzellan-Befehl Zweig kann dafür verwendet werden.--committer-date-is-author-date
ist in diesem Fall unnötig. Wenn Sie rebase arbeiten, kann es eine gute Idee, um die Tatsache hervorzuheben, dass es zurückgesetzt wurde, indem Sie die commit-Datum älter als das Verfasser-Datum.--onto F
statt--onto B
alle diese verpflichtet sind schon auf B, und wir verschieben Sie auf F ?Vor ein paar Jahren schrieb ich etwas zu behandeln, diese Art der Sache. (Kommentare und Verbesserungsvorschläge sind natürlich willkommen, aber urteilen Sie nicht zu viel - es war eine lange Zeit vor! Ich wusste gar nicht, Perl noch!)
Es ist gedacht für eher statische Situationen - Sie konfigurieren, indem Sie die Einstellung config-Parameter der form
branch.<branch>.autorebaseparent
. Es wird sich nicht berühren Sie eine beliebige Zweige, die nicht über das config-parameter eingestellt. Wenn das ist nicht, was Sie wollen, könnten Sie wahrscheinlich hacken Sie es, wo Sie es möchten ohne zu viel Mühe. Ich habe nicht wirklich verwendet viel im letzten Jahr oder zwei, aber wenn ich Tat, es schien immer zu sein sehr sicher und stabil, soweit das möglich ist mit Masse automatische rebasierung.So ist es hier. Verwenden Sie es, indem Sie es speichern in eine Datei namens
git-auto-rebase
in IhremPATH
. Es ist wahrscheinlich auch eine gute Idee, die trocken laufen (-n
) auswählen, bevor Sie versuchen, es für real. Es kann sein, ein wenig mehr detail, als man eigentlich will, aber es wird Ihnen zeigen, was es geht, um zu versuchen, um Stellungswechsel, und auf was. Könnte sparen Sie einige Trauer.Eine Sache, die ich gefunden habe, da ich ursprünglich angesprochen wird, ist, dass manchmal die Antwort ist, dass Sie nicht wirklich wollen, Stellungswechsel an alle! Es gibt etwas zu sagen für den Start Thema Zweige auf der rechten gemeinsamen Vorfahren in den ersten Platz, und nicht versuchen zu bewegen vorwärts nach dieser. Aber das ist zwischen Ihnen und Ihrem workflow.
Wenn es nötig ist update committer Datum, die
GIT_COMMITTER_DATE
Umgebungsvariable kann verwendet werden (Handbuch). Auch die Verwendung--format
option, um eine branch-Namen ohne weitere Formatierung.NB: es ist erforderlich, um entweder
--committer-date-is-author-date
oderGIT_COMMITTER_DATE
garantieren die gleiche Prüfsumme fürC'
,Ca'
undCb'
verpflichtet (rebasierung auf Funktion, Funktion-eine und feature-b entsprechend).