95 votes

git rebase utilisant sourcetree

Je pense que je suis confus sur la façon d'utiliser SourceTree GUI pour faire git rebase. J'ai deux branches "master" et "dev". Comme on le voit, les deux branches ont divergé. Je veux faire un rebasement sur la branche "dev", en utilisant la ligne de commande, ce serait :

git checkout dev
git rebase master

enter image description here

Je me serais attendu à un clic droit sur "dev", et à choisir "Rebase current changes onto dev". Je suppose que "current changes" signifie "nouveaux commits sur master". Mais le choix de cette option semble n'avoir aucun effet. Quelles seraient les étapes correctes ?

131voto

VonC Points 414372

Mais le choix de cette option semble n'avoir aucun effet.

Oui, parce que les modifications actuelles sont celles des branches actuelles, qui sont dev .

Rebasage dev sur le dessus de dev signifie un no-op.

git checkout dev
git rebase master

Cela signifie que la branche actuelle est dev : à rebaser sur le dessus de master .

Donc dans SourceTree, vous devez faire un clic droit sur master (alors que dev est vérifié), et sélectionnez :

Rebase current changes onto master

Howe ajoute dans les commentaires :

Nom actuel de " rebase current changes onto [branch] "est trompeur. Regardez ce qui suit discussion sur l'amélioration SRCTREE-1578 .

Après m'être retrouvé perplexe en essayant de mettre une branche de fonctionnalité à jour avec le développement et en échouant, je me suis rendu compte que l'élément du menu contextuel du volet gauche appelé " rebase current changes onto $somebranch "fait en fait le contraire de ce que son nom suggère :
il rebase la branche courante à l'état de $somebranch ;
En d'autres termes, il rebase $somebranch sur (ou dans) la branche courante, et non l'inverse. (N'est-ce pas ?)

La préposition " onto "dans le texte actuel est trompeur ; il implique que l'objet de la phrase ( $somebranch dans mon exemple) recevra les changements.
En fait, c'est le contraire qui se produira.
L'absence du nom de la branche actuelle ajoute à la confusion.

Une reformulation qui améliorerait la structure de la phrase et inclurait le nom de la branche concernée permettrait de gagner énormément en clarté.
Par exemple :

rebase $currentbranch to head of $somebranch
rebase $somebranch onto $currentbranch

13 votes

Pour le contexte, le downvote vient de deadman qui a posté une réponse plus tôt sans aborder SourceTree du tout. J'ai rétrogradé et expliqué mes critiques dans un commentaire. Apparemment, deadman n'a pas apprécié les remarques constructives que j'ai faites.

1 votes

Cela modifiera-t-il la branche principale ? Je voudrais simplement mettre à jour ma branche de développement avec les dernières modifications de la branche principale - et plus tard fusionner ma branche de développement dans la branche principale. La méthode décrite permettra-t-elle de réaliser cette tâche ?

1 votes

@Gerfried Non, cela ne changera pas master : l'idée d'une rebase est de rejouer vos commits au dessus d'une branche (qui n'a pas réalisé qu'elle est utilisée par cette rebase). Mais dans votre cas (je voudrais juste mettre à jour ma branche dev avec les dernières modifications de la branche master), une fusion est préférable, surtout si vous avez déjà poussé dev.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X