Aplatir commet sur une branche
Est-il possible de condenser l'engage sur une branche en un seul commit avant de le fusionner avec le principal? Je pensais que ce serait un scénario assez commun, mais peut-être que je ne suis pas en utilisant les bons termes de recherche.
Je vais vous expliquer le scénario de façon plus détaillée. Souvent j'ai envie de faire beaucoup de modifications locales, tout en travaillant sur un changement dans une branche pour m'assurer d'avoir un historique complet des changements. Mais une fois à travers les changements dans la branche, quand je suis à la fusion à la page principale, je voudrais réduire les commits sur la branche d'un seul et ensuite de le fusionner à la main. Je comprends que les commits sont peu coûteux dans Git, mais dans certaines situations, je pourrais juste préfèrent le faire.
* merge to main
|\
* | commit 2 on main
* | commit 1 on main
| * commit 2 on branch
| * commit 1 on branch
|/
* branch from main
être fait pour ressembler à
* merge to main
|\
* | commit 2 on main
* | commit 1 on main
| * commit on branch (branch commits flattened to one)
|/
* branch from main
Je suis un novice quand il s'agit de git. Si j'ai commis une erreur dans l'utilisation des termes, je voulais m'excuser.
source d'informationauteur Coffee And Keyboard
Vous devez vous connecter pour publier un commentaire.
Utilisation interactive de rebasage. Trouver le commettre l'endroit où votre succursale ont divergé à partir de maître (de mai à l'aide de
git merge-base
; appelons la validation<diverge>
), puiset un éditeur s'ouvrira, vous permettant de réécrire l'histoire de manière interactive. Vous aurez envie de squash s'engage.
Je recommanderais à apprendre à utiliser le rebase interactif, mais au cas où cela vous semble trop compliqué pour vous, vous pouvez simplement utiliser
git reset --soft <diverging-commit>
pour annuler toutes les engage à les divergences de point sans changer l'index, et
git commit -s
de faire un commit unique de tous les changements.
Vous pouvez également utiliser
git merge --squash <branch>
de fusionner une branche sans effectuer aucune engage:Bien sûr, vous devez résister à l'envie de le faire si vous pouvez l'aider. Voir Tu ne dois Pas Mentir: git rebase, de modification, de squash, et autres mensonges pour une discussion sur pourquoi.
Regarder
git rebase
. Le-i
option vous donne la possibilité de modifier, de squash (ce que vous voulez), ou même le supprimer, s'engage.Par exemple, la façon dont je l'utilise généralement comme: