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.