Git merge de l'aplatissement de la

si je travaille dans plusieurs branches sur une seule fonctionnalité, j'utilise git pull branch1 branch2 branch3 pour tirer tous les changements dans ma branche principale. Cependant, tous les journaux de chaque branche sont également copiés. Comment aplatir le journal de validation d'un seul message?

39
demandé sur lord_t 2009-04-24 02:08:24
la source

3 ответов

Vous pouvez utiliser interactif rebase et "écraser" les commits -- voir aussi la Git Prêt Tutoriel sur les écraser par rebase . Désolé de simplement jeter un lien sur vous, mais c'est un tutoriel assez complet. Oh, Et ça effacera aussi très bien vos fusions.

24
répondu Pat Notz 2011-08-03 17:15:38
la source

"git merge --squash" (d'après "git fetch"; "git pull" est juste fetch+de fusion, pehaps il permet aussi, de squash en option) pourrait être ce que vous voulez.

à Partir de git-fusion(1) :

--squash

produire l'arbre de travail et l'état d'index comme si une fusion réelle s'était produite, mais ne pas réellement faire une commit ou déplacer la tête, ni enregistrer $GIT_DIR/MERGE_HEAD pour que la prochaine commande git commit crée une commit merge. Cela vous permet de créer un single commit sur la branche courante dont l'effet est le même que la fusion d'une autre branche (ou plus dans le cas d'une pieuvre).

70
répondu Jakub Narębski 2009-04-24 22:26:07
la source

comme Brian White a commenté le problème avec git merge --squash est qu'il ne vous donne aucun lien visible, et donc aucune traçabilité de retour à la branche (ou les changements individuels) que vous avez fusionné.

visiblement (lorsqu'il est vu comme un graphe git log --graph ), une branche importante qui a été fusionnée en arrière ne ressemble pas différent à une branche expérimentale que vous avez trafiqué autour et serait heureux de jeter. Les deux sont juste accrochés là sans aucun rapport avec quoi que ce soit. Je veux personnellement pour savoir qu'une branche a été fusionnée dans la je sais que le travail est effectué.

une solution qui fonctionne pour moi est d'utiliser une fusion avec l'option no-fastforward.

git merge --no-ff somebranch -m "my commit message"

cela force git à créer un commit unique avec tous les changements de branche inclus, vous pouvez définir le message de commit vous-même (si vous voulez) mais surtout, il lie le nouveau commit à la branche dans laquelle il vient de fusionner. Cela montre clairement que le travail sur cette branche est complet, mais vous permet également de tracer en arrière pour voir les détails de l'individu commet de la branche fusionnée.

voici un exemple où des branches très simples avec respectivement une et deux propagations ont été fusionnées en master. J'ai ensuite supprimé les étiquettes de branche sur les branches fusionnées, mais le nom de branche peut encore être vu sur le message de propagation de la fusion. Le nom de la branche doit résumer les changements et si vous voulez savoir les modifications contenues vous pouvez remonter jusqu'à la personne s'engage. Cette approche semble bien fonctionner pour des projets simples.

Note : j'ai dû tirer manuellement l'un des connecteurs comme c'était d'un bleu sombre, il était à peine visible.

git log output

7
répondu samaspin 2015-09-04 14:01:28
la source

Autres questions sur git git-push git-merge git-pull