Question

J'ai un serveur distant Git, voici le scénario que je veux effectuer:

  • Pour chaque bug / fonctionnalité que je crée une branche Git différente

  • je continue à commettre mon code dans cette branche Git avec des messages Git un-officiels

  • En haut dépôt, nous devons faire un commettras pour un bug avec le message officiel Git

Alors, comment puis-je fusionner ma branche à distance afin qu'ils obtiennent juste un commettras pour tous mes check-ins (je veux même de fournir le message de validation pour cela)?

Était-ce utile?

La solution

Supposons que votre branche de correction de bug est appelé bugfix et que vous souhaitez fusionner dans master:

git checkout master
git merge --squash bugfix
git commit

Cela prendra toutes les commits de la branche bugfix, les courge en 1 commettras et fusionner avec votre branche master.


Explication :

git checkout master

Commutateurs à votre branche master.

git merge --squash bugfix

prend toutes les commits de la branche bugfix et se confond avec votre branche actuelle.

git commit

Crée un commettras de la fusionner les modifications.

Omettre le paramètre -m vous permet de modifier un projet de message de commit contenant tous les messages de vos commits écrasements avant de finaliser votre livraison.

Autres conseils

Ce qui a finalement éclairci ce pour moi é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 branche de fonctionnalité avec 105 (!!) commits et ont tous écrasés en un seul, je ne veux pas git rebase -i origin/master parce que je dois séparément résoudre les conflits de fusion pour chaque des commits intermédiaires (ou du moins ceux qui git ne peuvent pas comprendre lui-même). L'utilisation git merge --squash me obtient le résultat que je veux, d'un seul commettras pour fusionner une branche de fonctionnalité entière. Et, je ne dois faire au plus une résolution manuelle des conflits.

Vous souhaitez fusionner avec l'option squash. C'est si vous voulez faire une branche à la fois.

git merge --squash feature1

Si vous souhaitez fusionner toutes les branches en même temps que commits unique, puis la première rebasage interactive et de squash chaque fonction puis poulpes fusion:

git checkout feature1
git rebase -i master

Squash dans un commettras puis répétez l'opération pour les autres fonctions.

git checkout master
git merge feature1 feature2 feature3 ...

Cette dernière fusion est une « fusion de poulpe » parce qu'il est la fusion d'un grand nombre de branches à la fois.

Hope this helps

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

git reset --soft HEAD^1
git commit

branche Fusion newFeature en master avec une coutume commit:

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 comprendra tous les commits de branche newFeature, que vous pouvez personnaliser.

Je l'explique bien ici: https://youtu.be/FQNAIacelT4

Je sais que cette question ne concerne pas spécifiquement Github, mais depuis Github est si largement utilisé, ce qui est la réponse que je cherchais, je vais partager ici.

Github a la capacité d'effectuer des fusions de squash, en fonction des options de fusion activées pour le dépôt.

Si la courge se confond sont activées, l'option « Squash et fusion » devrait apparaître dans le menu déroulant sous le bouton « Merge ».

Supposons que vous avez travaillé fonctionnalité / Task1 avec plusieurs commits.

  1. Accédez à votre branche de projet (projet / my_project)

    git checkout project/my_project
    
  2. Créer une nouvelle branche (fonction / task1_bugfix)

    git checkout -b feature/task1_bugfix
    
  3. Marge avec l'option --squash

    git merge --squash feature/task1
    
  4. Créer un commettras

    git commit -am "add single comments"
    
  5. Poussez votre branche

    git push --set-upstream origin feature/task1_bugfix
    

Pour Git

Créer une nouvelle fonctionnalité

via Terminal / Shell:

git checkout origin/feature/<featurename>
git merge --squash origin/feature/<featurename>

Ce ne marche pas commettre, vous permet de vérifier d'abord.

Ensuite, commit et fonction d'arrivée de cette nouvelle branche, et supprimer / ignorer l'ancien (celui que vous avez fait sur dev).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top