Comprender la ramificación con Git y Github

Tengo un problema. Tengo 2 twigs, que son master y my-destinations . Realicé algunos cambios en my-destinations twig de my-destinations que no están en master . Me comprometí y presioné los cambios en mi repository git de la twig de my-destinations .

Cuando vuelvo a dominar los cambios que cometí y que envié al repository, no están allí, lo que esperaba. Sin embargo, cuando vuelvo a master y ejecuto un git status , dice que el master está actualizado. Hubiera pensado que habría dicho que el master es uno que se compromete detrás del origin .

¿Alguien puede ayudarme a entender por qué el master está actualizado con el origin/master , pero no tiene los cambios comprometidos?

¿Alguien puede ayudarme a entender por qué el maestro está actualizado con el origen / maestro, pero no tiene los cambios comprometidos?

Su sucursal local master tiene los mismos files que github remote master sucursal github remote master . Es por eso que su twig maestra (local) no está detrás de su twig maestra (remota).

Su sucursal principal (local) estaría detrás (cualquier cantidad de confirmaciones) si alguien más (o usted de cualquier otra computadora remota) hubiera realizado nuevos cambios en la sucursal maestra (remota).

Agregaste commits a my-destinations , en tu repository local, no a master :

 a <-- master ref is (a) \ b - c - d <-- my-destinations ref is (d) 

Cuando presionó hacia el origin , el repository remoto, simplemente tomó su twig master local existente e hizo que el master repository remoto sea el mismo. En otras palabras, el master remoto se actualizó a la reference (a), al igual que su master local. Si ya estaba en (a), no habría habido ningún cambio en el control remoto.

Su control remoto se llama origin , que es la convención de nomenclatura estándar. Por lo tanto, si agrega una twig de seguimiento local para el master remoto, se llamará origin/master , y hará reference a la misma confirmación después de que se produzca un envío para esa twig:

 a <-- master (a)* <-- origin/master (a) \ b - c - d <-- my-destinations (d) (*) - Indicates branch that is checked out 

Tenga en count que si no presionó mientras my-destinations estaba desprotegido, entonces el origin no tendría sus nuevos commits b, c, yd, a less que use flags de command-line o algún otro método para enviar todas las twigs al origin . Si hiciera push con my-destinations desprotegidos, también habría confirmaciones de bcd en el control remoto y una reference de seguimiento local de origin/my-destinations que también apuntaría a (d).

Pero la gran pregunta es cómo hacer que tus nuevos commits vuelvan a master . Para get tus nuevos commits para master desde my-destinations , puedes simplemente git merge my-destinations con master check out, que, en este caso, solo "avanzará" el master hasta el compromiso (d), ya que el master es haciendo reference a un padre de my-destinations (es decir, no divergieron, puede pensar en abcd como una línea recta en lugar de una twig). Después de la fusión, tendrías:

 a <-- origin/master (a) \ b - c - d <-- master (d)* <-- my-destinations (d) 

Luego, después de presionar a control remoto, el origin/master se actualizará para que coincida con el master en la confirmación (d), es decir, las tres references estarían apuntando a (d).


Nota: Si el master y my-destinations hubiesen divergido, podría fusionar o rebasear para volver a unirlos. Busque el "tutorial visual git" en Google y debe encontrar varios buenos tutoriales que lo guiarán a través de estos.

También tenga en count: Recomiendo Git Extensions como una herramienta de GUI de código abierto que le ayudará a ver exactamente qué está pasando con sus twigs, confirmaciones, local y remota mucho más fácilmente con una GUI. Me ha ayudado a aprender Git mucho más fácil, siempre lo tengo abierto en segundo plano mientras trabajo en Visual Studio u otras herramientas en primer plano. Básicamente, le mostrará algo similar a los diagtwigs anteriores para cualquier repository que tenga abierto, a medida que se realicen cambios.