¿Cómo puedo crear una twig de hermanos que incluya todas las confirmaciones de otra twig en un nodo?

Tengo una twig, mybranch, que tiene seis commits y stem de commit C. Me gustaría crear una nueva twig, también basada en commit C, que efectivamente incluye todos los commits de mybranch, aplastados en un commit. ¿Cuál es la forma más fácil de hacer esto?

Necesito hacer esto debido al mantra de "squash before you git-push". Para la nueva sucursal, no quiero ninguna mención de mybranch en el historial enviado al server remoto. La razón por la que quiero crear una nueva twig utilizada es porque me gustaría mantener todas las confirmaciones en mybranch como reference.

Solutions Collecting From Web of "¿Cómo puedo crear una twig de hermanos que incluya todas las confirmaciones de otra twig en un nodo?"

¿Por qué solo presionar aplastado se compromete? Eso suena loco (y equivocado).

Pero para responder a tu pregunta:

git checkout -b newbranch # checkout new branch git reset --soft C # move to commit C git add -u # add all changes to index git commit -m 'squashed commit' 

Otra posibilidad sería usar rebase -i para aplastar / corregir todas las confirmaciones en una sola:

 git checkout -b newbranch git rebase -i C # now, replace every 'pick' with 'fixup'/'squash' except the first one 

También de interés es git merge --squash :

Produzca el tree de trabajo y el estado del índice como si se hubiera producido una fusión real (excepto la información de fusión), pero no realice un commit o mueva el HEAD, ni grabe $ GIT_DIR / MERGE_HEAD para provocar que el próximo command de git commit cree una fusión cometer. Esto le permite crear una única confirmación en la parte superior de la twig actual, cuyo efecto es el mismo que la fusión de otra twig (o más en el caso de un pulpo).

 git checkout -b newbranch C # create newbranch at commit C git merge --squash mybranch git commit -m 'squashed commit'