La relocalisation d'une succursale, y compris tous ses enfants
J'ai le texte suivant le dépôt Git de topologie:
A-B-F (master)
\ D (feature-a)
\ /
C (feature)
\
E (feature-b)
Par la relocalisation feature
branche je m'attendais à rebase l'ensemble de la sous-arborescence (y compris les succursales enfant):
$ git rebase feature master
A-B-F (master)
\ D (feature-a)
\ /
C (feature)
\
E (feature-b)
Cependant, c'est le résultat réel:
C' (feature)
/
A-B-F (master)
\ D (feature-a)
\ /
C
\
E (feature-b)
Je sais que je peux facilement corriger manuellement en exécutant:
$ git rebase --onto feature C feature-a
$ git rebase --onto feature C feature-b
Mais est-il un moyen de automatiquement rebase branche, y compris l'ensemble de ses enfants ou descendants?
- Voir aussi comment j'avais rebase un ensemble de subhistory -- plusieurs branches, avec des liens entre eux résultant de la fusion. La désagréable partie de cette solution est de réinitialiser le thème de la branche refs de la nouvelle relocalisée s'engage par la suite.
- merci pour la mention de l' --sur option pour git rebase - il résoudre mon problème
- Ne devrait pas
$ git rebase feature master
être$ git rebase master feature
? - Double Possible de Git rebase-arbre
Vous devez vous connecter pour publier un commentaire.
xargs
en ajoutant-n 1
à forcegit rebase
être exécuté à chaque fois pour chaque branche. Je me suis permis de modifier votre réponse. Aussi j'ai utiliséC
plutôt queC^
, je ne suis pas sûr de savoir pourquoi vous avez utilisé la dernière forme. Néanmoins un grand merci, c'est exactement ce que je cherchais.| grep -v '\*'
avant de passer à xargs. Cependant, depuis rebase est également un service en porcelaine de commande, d'une succursale peut être utilisé pour cela.--committer-date-is-author-date
est inutile dans ce cas. Lorsque vous rebase de travail, il peut être une bonne idée pour mettre en évidence le fait qu'il a été relocalisée en laissant l'engagement de la date de la plus ancienne que l'auteur-date.--onto F
au lieu de--onto B
, comme toutes ces révisions sont déjà sur B, et de nous déplacer sur F ?Il y A quelques années, j'ai écrit quelque chose à gérer ce genre de chose. (Commentaires d'amélioration sont les bienvenus, mais ne juge pas trop - c'était il y a longtemps! Je ne savais même pas Perl encore!)
Il est destiné pour les plus statique des situations - vous configurer en paramètre de config paramètres de la forme
branch.<branch>.autorebaseparent
. Il ne veut pas toucher à toutes les branches qui n'ont pas cette config jeu de paramètres. Si ce n'est pas ce que vous voulez, vous pourriez probablement hack à l'endroit où vous voulez sans trop de difficultés. Je n'ai pas vraiment utilisé beaucoup dans la dernière année ou deux, mais quand j'ai fait l'utiliser, il semblait toujours être tout à fait sûr et stable, dans la mesure où c'est possible avec la masse automatisé de rebasage.Si elle est ici. Utiliser en l'enregistrant dans un fichier appelé
git-auto-rebase
dans votrePATH
. C'est probablement aussi une bonne idée d'utiliser la marche à sec (-n
) option avant de l'essayer pour de vrai. Il peut être un peu plus de détails que vous voulez vraiment, mais il va vous montrer ce qu'il va essayer de rebase, et sur quoi. Vous pourriez économiser quelques chagrin.Une chose que j'ai trouvé, depuis que j'ai adressé à l'origine de ceci, est que, parfois, la réponse est que vous n'avez pas vraiment envie de rebase à tous! Il y a quelque chose à dire pour le démarrage sujet branches du droit ancêtre commun, en premier lieu, et de ne pas essayer de les faire avancer par la suite. Mais c'est entre vous et votre flux de production.
Si il est besoin de mise à jour d'un committer date, le
GIT_COMMITTER_DATE
variable d'environnement peut être utilisé (manuel). Également utiliser--format
option pour obtenir un nom de branche sans mise en forme supplémentaires.NB: il est nécessaire de définir
--committer-date-is-author-date
ouGIT_COMMITTER_DATE
de garantir la même somme pourC'
,Ca'
etCb'
s'engage (sur la relocalisation fonction, fonctionnalité-un et fonction-b en conséquence).