J'ai la topologie de référentiel Git suivante:
A-B-F (master)
\ D (feature-a)
\ /
C (feature)
\
E (feature-b)
En rebasant la feature
branche, je m'attendais à rebaser tout le sous-arbre (y compris les branches enfants):
$ git rebase feature master
A-B-F (master)
\ D (feature-a)
\ /
C (feature)
\
E (feature-b)
Cependant, voici le résultat réel:
C' (feature)
/
A-B-F (master)
\ D (feature-a)
\ /
C
\
E (feature-b)
Je sais que je peux facilement le réparer manuellement en exécutant:
$ git rebase --onto feature C feature-a
$ git rebase --onto feature C feature-b
Mais existe-t-il un moyen de rebaser automatiquement la branche, y compris tous ses enfants / descendants?
git
version-control
branch
rebase
git-rebase
Tomasz Nurkiewicz
la source
la source
$ git rebase feature master
être$ git rebase master feature
?Réponses:
la source
--onto F
place de--onto B
, car tous ces commits sont prêts sur B et nous les déplaçons sur F ?Il y a quelques années, j'ai écrit quelque chose pour gérer ce genre de choses. (Les commentaires d'amélioration sont bien sûr les bienvenus, mais ne jugez pas trop - c'était il y a longtemps! Je ne connaissais même pas encore Perl!)
Il est destiné à des situations plus statiques - vous le configurez en définissant les paramètres de configuration du formulaire
branch.<branch>.autorebaseparent
. Il ne touchera aucune branche qui n'a pas ce jeu de paramètres de configuration. Si ce n'est pas ce que vous voulez, vous pouvez probablement le pirater là où vous le souhaitez sans trop de problèmes. Je ne l'ai pas vraiment utilisé au cours des deux dernières années, mais quand je l'ai utilisé, il semblait toujours assez sûr et stable, dans la mesure où cela est possible avec un rebasage automatisé en masse.Alors voilà. Utilisez-le en l'enregistrant dans un fichier appelé
git-auto-rebase
dans votrePATH
. C'est probablement aussi une bonne idée d'utiliser l'-n
option dry run ( ) avant de l'essayer pour de vrai. C'est peut-être un peu plus de détails que vous ne le souhaitez vraiment, mais cela vous montrera ce qu'il va essayer de rebaser, et sur quoi. Cela pourrait vous épargner du chagrin.Une chose que j'ai trouvée, depuis que j'ai abordé cette question à l'origine, est que parfois la réponse est que vous ne vouliez pas du tout rebaser! Il y a quelque chose à dire pour commencer les branches de sujet au bon ancêtre commun en premier lieu, et ne pas essayer de les faire avancer par la suite. Mais c'est entre vous et votre flux de travail.
la source
S'il est nécessaire de mettre à jour une date de validation , la
GIT_COMMITTER_DATE
variable d'environnement peut être utilisée ( manuel ). Utilisez également l'--format
option pour obtenir un nom de branche sans mise en forme supplémentaire.NB: il est nécessaire de définir soit
--committer-date-is-author-date
ouGIT_COMMITTER_DATE
de garantir la même somme de contrôle pourC'
,Ca'
etCb'
commits (lors du rebasage de la fonction , de la fonction-a et de la fonction-b en conséquence).la source