Ich habe die folgende Git-Repository-Topologie:
A-B-F (master)
\ D (feature-a)
\ /
C (feature)
\
E (feature-b)
Durch die Neubasierung des feature
Zweigs erwartete ich, den gesamten Teilbaum (einschließlich der untergeordneten Zweige) neu zu gründen:
$ 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ß, dass ich es leicht manuell beheben kann, indem ich Folgendes ausführe:
$ git rebase --onto feature C feature-a
$ git rebase --onto feature C feature-b
Aber gibt es eine Möglichkeit, den Zweig einschließlich aller seiner Kinder / Nachkommen automatisch neu zu gründen?
git
version-control
branch
rebase
git-rebase
Tomasz Nurkiewicz
quelle
quelle
$ git rebase feature master
sein$ git rebase master feature
?Antworten:
quelle
--onto F
stattdessen sein--onto B
, da alle diese Commits bereits auf B sind und wir sie auf F verschieben ?Vor ein paar Jahren habe ich etwas geschrieben, um so etwas zu handhaben. (Kommentare zur Verbesserung sind natürlich willkommen, aber urteilen Sie nicht zu viel - es ist lange her! Ich kannte Perl noch nicht einmal!)
Es ist für statischere Situationen gedacht - Sie konfigurieren es, indem Sie die Konfigurationsparameter des Formulars festlegen
branch.<branch>.autorebaseparent
. Es werden keine Zweige berührt, für die dieser Konfigurationsparameter nicht festgelegt ist. Wenn Sie das nicht wollen, können Sie es wahrscheinlich ohne allzu große Probleme dorthin hacken, wo Sie es wollen. Ich habe es in den letzten ein oder zwei Jahren nicht wirklich oft benutzt, aber als ich es benutzt habe, schien es immer ziemlich sicher und stabil zu sein, soweit dies mit automatisierter Massenumbasierung möglich ist.Hier ist es also. Verwenden Sie es, indem Sie es in einer Datei speichern, die
git-auto-rebase
in Ihrem aufgerufen wirdPATH
. Es ist wahrscheinlich auch eine gute Idee, die-n
Option dry run ( ) zu verwenden, bevor Sie es wirklich versuchen. Es mag ein bisschen detaillierter sein, als Sie wirklich wollen, aber es wird Ihnen zeigen, was es versuchen wird, und auf was zurückzugreifen. Könnte dir etwas Kummer ersparen.Eine Sache, die ich gefunden habe, seit ich dies ursprünglich angesprochen habe, ist, dass manchmal die Antwort ist, dass Sie eigentlich gar nicht neu gründen wollten! Es gibt etwas zu sagen, um Themenzweige überhaupt beim richtigen gemeinsamen Vorfahren zu starten und danach nicht zu versuchen, sie voranzutreiben. Aber das ist zwischen Ihnen und Ihrem Workflow.
quelle
Wenn ein Committer-Datum aktualisiert werden muss , kann die
GIT_COMMITTER_DATE
Umgebungsvariable verwendet werden ( manuell ). Verwenden Sie auch die--format
Option, um einen Zweignamen ohne zusätzliche Formatierung abzurufen.NB: Es ist erforderlich , um festgelegt entweder
--committer-date-is-author-date
oderGIT_COMMITTER_DATE
die gleiche Prüfsumme zu garantierenC'
,Ca'
undCb'
Commits (auf Rebasing Feature , Feature-a und Feature-b entsprechend).quelle