Comment utiliser git merge –squash?

J’ai un serveur Git distant, voici le scénario que je veux réaliser:

Alors, comment puis-je fusionner ma twig avec une twig distante de manière à ce qu’elle ne reçoive qu’un seul commit pour tous mes check-ins (je veux même fournir un message de validation pour cela)?

Supposons que votre twig de correction de bogue soit appelée bugfix bogue et que vous souhaitez la fusionner en master :

 git checkout master git merge --squash bugfix git commit 

Cela prendra tous les commits de la twig de bugfix , les écrasera en 1 commit et le fusionnera avec votre twig principale.


Explication :

 git checkout master 

Passe à votre twig principale.

 git merge --squash bugfix 

Prend tous les commits de la twig de bugfix et les fusionne avec votre twig actuelle.

 git commit 

Crée un seul commit à partir des modifications fusionnées.

L’omission du paramètre -m vous permet de modifier un message de validation provisoire contenant tous les messages de vos validations écrasées avant de finaliser votre validation.

Vous souhaitez fusionner avec l’option squash. C’est si vous voulez le faire une twig à la fois.

 git merge --squash feature1 

Si vous souhaitez fusionner toutes les twigs en même temps que des validations simples, rebassez d’abord interactivement et écrasez chaque fonctionnalité, puis Octopus fusionne:

 git checkout feature1 git rebase -i master 

Squash dans un commit puis répète pour les autres fonctionnalités.

 git checkout master git merge feature1 feature2 feature3 ... 

Cette dernière fusion est une “fusion de pieuvres” car elle fusionne beaucoup de twigs à la fois.

J’espère que cela t’aides

Ce qui a finalement permis de résoudre ce problème était un commentaire montrant que:

 git checkout main git merge --squash feature 

est l’équivalent de faire:

 git checkout feature git diff main > feature.patch git checkout main patch -p1 < feature.patch git add . 

Quand je veux fusionner une twig d'entités avec 105 commits et les avoir tous écrasés en un seul, je ne veux pas git rebase -i origin/master car je dois résoudre séparément les conflits de fusion pour chacun des commits intermédiaires (ou du moins ceux que git ne comprend pas). Utiliser git merge --squash me git merge --squash obtenir le résultat que je souhaite, avec un seul commit pour fusionner une twig entière. Et, je dois seulement faire au plus une résolution de conflit manuelle.

Si vous avez déjà git merge bugfix de git merge bugfix sur le main , vous pouvez écraser votre engagement de fusion en un seul avec:

 git reset --soft HEAD^1 git commit 

Fusionnez la twig newFeature dans master avec un commit personnalisé:

 git merge --squash newFeature && git commit -m 'Your custom commit message'; 

Si au contraire, vous faites

git merge --squash newFeature && git commit

vous obtiendrez un message de validation qui inclura tous les newFeature twig newFeature , que vous pouvez personnaliser.

Pour Git

Créer une nouvelle fonctionnalité

via Terminal / Shell:

 git checkout origin/feature/ git merge --squash origin/feature/ 

Cela ne le commet pas, vous permet de l’examiner en premier.

Ensuite, validez et terminez la fonctionnalité de cette nouvelle twig et supprimez / ignorez l’ancienne (celle que vous avez créée).