tipos tag sirve remove qué para nos existen etiquetas cuando crear creamos commits git git-remote

tag - Git ramificación: maestro vs. origen/maestro vs. controles remotos/origen/maestro



qué tipos de etiquetas existen en git (6)

  1. origen : este es un nombre personalizado y más común para apuntar a remoto.

$ git remote add origin https://github.com/git/git.git --- Ejecutará este comando para vincular su proyecto github al origen. Aquí el origen está definido por el usuario. Puedes cambiarle el nombre por $ git remote rename old-name new-name

  1. maestro : el nombre de la rama predeterminada en Git es maestro. Para computadoras remotas y locales.
  1. origen / master : esto es solo un puntero para referir la rama principal en el repositorio remoto. Recuerda que dije puntos de origen a distancia.

$ git fetch origin - Descarga objetos y refs del repositorio remoto a su computadora local [origin / master]. Eso significa que no afectará a su rama principal local a menos que los fusione utilizando $ git merge origin/master . Recuerde sacar la rama correcta donde necesita fusionar antes de ejecutar este comando

Nota: El contenido obtenido se representa como una rama remota. La búsqueda le brinda la oportunidad de revisar los cambios antes de integrarlos en su copia del proyecto. Para mostrar los cambios entre los tuyos y el $git diff master..origin/master remoto de $git diff master..origin/master

Creo que estoy en el camino correcto para entender los conceptos básicos de git.

Ya configuré y cloné un repositorio remoto. También creé un repositorio vacío del lado del servidor y uní mi repositorio local.

Mi problema es que no entiendo la diferencia entre:

  • origen / maestro vs. controles remotos / origen / maestro

Por lo que he entendido, el maestro es una rama local, y los controles remotos / origen / maestro son remotos.

Pero, ¿qué es exactamente origen / maestro ?


Intentaría simplificar la respuesta de @ ErichBSchulz para principiantes:

  • origen / maestro es el estado de la rama principal en el repositorio remoto
  • maestro es el estado de la rama principal en el repositorio local

Respuesta corta para dummies como yo (robado de Torek):

  • origin / master es "donde el maestro estaba allí la última vez que lo revisé"
  • master es "donde el maestro está aquí basado en lo que he estado haciendo"

Técnicamente no hay nada "remoto" 1 en tu repositorio de Git, solo hay nombres locales que deberían corresponder a los nombres en otro repositorio diferente. Las llamadas origin/whatever que inicialmente coincidirán con las del repositorio clonado desde:

git clone ssh://some.where.out.there/some/path/to/repo # or git://some.where...

hace una copia local del otro repositorio. A lo largo del camino, toma nota de todas las ramas que estaban allí, y las asigna a las que se refieren, y las guarda en su repositorio local bajo los nombres refs/remotes/origin/ .

Dependiendo de cuánto tiempo vayas antes de que git fetch o equivalente para actualizar "mi copia de lo que hay en algún sitio", pueden cambiar sus ramas, crear nuevas y eliminar algunas. Cuando hagas tu git fetch (o git pull que es realmente buscar más fusión), tu repos hará copias de su nuevo trabajo y cambiará todas las entradas de refs/remotes/origin/<name> según sea necesario. Es ese momento de fetch que hace que todo coincida (bueno, eso y el clon inicial, y algunos casos de push también, básicamente cada vez que Git tiene la oportunidad de verificarlo), pero vea la advertencia a continuación).

Git normalmente hace que te refieras a tus propios refs/heads/<name> como solo <name> , y los remotos como origin/<name> , y todo funciona porque es obvio cuál es cuál. A veces es posible crear sus propios nombres de rama que no lo hagan obvio, pero no se preocupe hasta que suceda. :-) Solo dale a Git el nombre más corto que lo hace obvio, y continuará desde allí: origin/master es "donde el maestro estuvo allí la última vez que lo revisé", y el master es "donde el maestro está aquí basado en lo que yo he estado haciendo". Ejecute git fetch para actualizar Git en "donde el maestro está allí", según sea necesario.

Advertencia: en las versiones de Git anteriores a 1.8.4, git fetch tiene algunos modos que no actualizan "donde el maestro está allí" (más precisamente, modos que no actualizan ninguna rama de rastreo remoto). Ejecutando git fetch origin , o git fetch --all , o incluso solo git fetch , se actualiza. Ejecutar git fetch origin master no . Desafortunadamente, este modo "no se actualiza" se desencadena por un git pull normal. (Esto es principalmente una molestia menor y se soluciona en Git 1.8.4 y versiones posteriores).

1 Bueno, hay una cosa que se llama "remota". ¡Pero eso también es local! El nombre de origin es lo que Git llama "un control remoto". Básicamente es solo un nombre corto para la URL que usaste cuando hiciste el clon. También es de donde proviene el origin en el origin/master . El nombre origin/master se denomina rama de seguimiento remoto , que a veces se abrevia como "rama remota", especialmente en documentos más antiguos o más informales.


Una aclaración (y un punto que me confundió):

"controles remotos / origen / HEAD es la rama predeterminada" no es realmente correcto.

remotes / origin / master fue la rama predeterminada en el repositorio remoto (la última vez que marcó). HEAD no es una rama, solo apunta a una rama.

Piense en HEAD como su área de trabajo. Cuando piensas de esta manera, ''git checkout branchname'' tiene sentido con respecto a cambiar tus archivos de área de trabajo para que sean los de una rama en particular. Usted "registra" los archivos de sucursal en su área de trabajo. HEAD para todos los fines prácticos es lo que está visible para usted en su área de trabajo.


Tome una clonación de un repositorio remoto y ejecute git branch -a (para mostrar todas las ramas que conoce git). Probablemente se verá algo como esto:

* master remotes/origin/HEAD -> origin/master remotes/origin/master

Aquí, el master es una sucursal en el repositorio local. remotes/origin/master es una rama llamada master en el origin designado remoto. Puede referirse a esto como origin/master , como en:

git diff origin/master..master

También puede referirse a él como remotes/origin/master :

git diff remotes/origin/master..master

Estas son solo dos formas diferentes de referirse a la misma cosa (por cierto, ambos comandos significan "muéstreme los cambios entre la rama master remota y mi rama master ).

remotes/origin/HEAD es la default branch para el origin nombrado remoto. Esto le permite simplemente decir origin lugar de origin/master .