Cómo comprometer e impulsar cambios usando Git

Solo quiero aclarar cómo funciona el compromiso en twigs específicas.

Digamos que estoy trabajando en una twig llamada "Metro". Realizo algunos cambios en algunos files, pero no estoy listo para enviarlos al repository remoto.

Una revisión entra que necesito arreglar lo antes posible. Necesito cambiar a una twig limpia llamada "Maestro", pero no puedo porque sobrescribiría los files que he cambiado. Necesito comprometerlos antes de poder cambiar.

Mi pregunta es, si realizo estos cambios en la twig "Metro", luego cambio a la twig limpia "Master", los cambios realizados en "Metro" serán enviados al repository remoto "Master" porque los he comprometido, incluso aunque estoy empujando a otra twig?

Para hacerlo breve, se compromete de forma aislada a las twigs, o ¿se agregan todos los commits al presionar al repository remoto?

Antes de cambiar las twigs a la maestra a través git checkout master , primero debe git commit -m 'some message' , de lo contrario, git intentará llevar los cambios de su twig actual junto con usted a la twig maestra.

¿los cambios realizados en "Metro" se enviarán al repository remoto "Maestro" porque los he comprometido, a pesar de que estoy presionando a otra twig?

Absolutamente no. git solo fusionará los cambios comprometidos de Metro a principal si le dices que haga eso. Eso es por layout ( Nota: lea acerca de los controles remotos de git, ya que con los controles remotos, puede configurar sus impulsos para hacerlo por "pnetworkingeterminado", que sería un caso en el que debe tener cuidado ).

Para hacerlo breve, se compromete de forma aislada a las twigs, o ¿se agregan todos los commits al presionar al repository remoto?

Para hacerlo breve: sí a la primera parte :-).

Técnicamente hablando, una twig en git es una cadena de confirmaciones, junto con un nombre. Si empuja una twig, empujará todas las confirmaciones que le pertenecen (a less que el repository remoto ya las tenga), pero nada más. Así que no, git no empujará de alguna manera todos los commits.

Sin embargo, tenga en count que debe tener cuidado solo para empujar la twig que desea presionar; git push puede configurarse para empujar todas sus twigs. Para evitar esto, configure la configuration var push.default:

 git config push.default current 

Esto asegura que git push solo presione la twig actual (y no todas las twigs, que solían ser las pnetworkingeterminadas).

Para entender cómo funcionan las sucursales en Git, creo que es importante cambiar la mentalidad de tener siempre en mente el tree de commits. Tienes un tree acíclico de confirmaciones en el que cada confirmación tiene un número de confirmaciones principales y nada más. Las twigs ahora son simples indicadores de compromisos específicos dentro de ese tree. Si realiza una nueva confirmación a una sucursal, todo lo que realmente sucede es que crea un nuevo object de confirmación con los cambios que tiene la versión anterior como principal y su puntero de twig se mueve a la nueva confirmación que ahora se agrega a todo el tree .

Entonces, las twigs son completamente independientes unas de otras, y de la misma manera, realmente no significan mucho. Son solo pointers.

En tu caso, cuando cambias de metro a master , estás (probablemente) operando en un lado diferente del tree. Todos los commits que crees ahora solo moverán el puntero-maestro actual de la twig, pero no afectarán a ninguna otra twig.

Y si empuja una bifurcación, todo lo que sucede es que le dice al remoto la confirmación a la que apunta la bifurcación, y luego le da al control remoto todos los objects que necesita para completar el tree.