remote - git: sincroniza el repositorio local con uno remoto
git remote add (8)
(Esta información es del Manual del usuario de Git )
También estoy aprendiendo, así que esto podría no ser exactamente una respuesta a la pregunta, pero podría ayudar a alguien:
- Cuando un repositorio remoto se clona inicialmente, las copias de todas las sucursales se almacenan en su repositorio local (
git branch -r
congit branch -r
) - Para actualizar estas copias y actualizarlas (es decir, sincronizarlas con la rama remota) use
git fetch
. Esto no afectará a ninguna de sus ramas creadas personalizadas existentes. - Para anular la verificación de su sucursal local una versión nueva de la rama en la que esté trabajando (suponiendo que ya haya ejecutado
git add origin /path/to/repository
) usegit checkout origin/branch_name
, esto anulará los cambios locales en la sucursalbranch_name
Tengo repositorios de git locales y remotos. Quiero sincronizar mi repositorio local con el repositorio remoto para que mi repositorio local se convierta en una copia del 100% del repositorio remoto. Lo que significa que si ciertos archivos difieren en estos repositorios, reemplazamos los locales con los remotos. Y si hay archivos en repositorios locales que no existen en el repositorio remoto, los archivos locales se eliminan.
¿Hay alguna forma de lograr eso que no sea hacer un clon nuevo de repo remoto?
Pregunta similar a Sync local git repo con remote en un disparo, descartando cambios / confirmaciones locales .
Debe comprender que un repositorio Git no es solo un árbol de directorios y archivos, sino que también almacena un historial de esos árboles, que puede contener ramas y fusiones.
Al recuperar un repositorio, copiará todas o algunas de las ramas allí en su repositorio. Estos están entonces en su repositorio como "ramas de seguimiento remoto", por ejemplo, sucursales llamadas como remotes/origin/master
o similares.
La obtención de nuevas confirmaciones desde el repositorio remoto no cambiará nada sobre su copia de trabajo local.
Su copia de trabajo normalmente tiene un compromiso desprotegido, llamado HEAD
. Este compromiso suele ser la punta de una de sus sucursales locales.
Creo que desea actualizar su sucursal local (o tal vez todas las sucursales locales) a la sucursal remota correspondiente, y luego verifique la última sucursal.
Para evitar cualquier conflicto con su copia de trabajo (que podría tener cambios locales), primero limpie todo lo que no esté versionado (usando git clean
). Luego verifica la rama local correspondiente a la rama remota a la que desea actualizar y usa git reset
para cambiarla a la rama remota que se busca. ( git pull
incorporará todas las actualizaciones de la rama remota en su local, que podrían hacer lo mismo, o crear un compromiso de fusión si tiene confirmaciones locales).
(Pero luego realmente perderá los cambios locales, tanto en la copia de trabajo como en los confirmaciones locales. Asegúrese de que realmente desea esto; de lo contrario, sería mejor usar una nueva rama; esto guarda sus confirmaciones locales. Y use git stash
para guardar los cambios que no son aún comprometido)
Editar: si solo tiene una sucursal local y está rastreando una sucursal remota, todo lo que necesita hacer es
git pull
desde dentro del directorio de trabajo.
Esto recuperará la versión actual de todas las ramas remotas rastreadas y actualizará la rama actual (y el directorio de trabajo) a la versión actual de la rama remota que está rastreando.
Estos pasos lo harán:
git reset --hard HEAD
git clean -f -x -d -n
entonces sin -n
Esto se hará cargo de todos los cambios locales. Ahora los compromisos ...
git status
y note la línea tal como:
Your branch is ahead of ''xxxx'' by N commits.
Tome nota del número ''N'' ahora:
git reset --hard HEAD~N
git pull
y finalmente:
git status
no debe mostrar nada para agregar / cometer. Todo limpio.
Sin embargo, un clon nuevo puede hacer lo mismo (pero es muy lento).
=== Actualizado ===
A medida que mi conocimiento de git mejoró ligeramente con el tiempo, se me ocurrió otra forma más sencilla de hacer lo mismo. Aquí es cómo (#con explicación). Mientras que en su rama de trabajo:
git fetch # This updates ''remote'' portion of local repo.
git reset --hard origin/<your-working-branch>
# this will sync your local copy with remote content, discarding any committed
# or uncommitted changes.
Aunque sus confirmaciones y cambios locales desaparecerán de la vista después de esto, es posible recuperar los cambios confirmados, si es necesario.
Parece que quieres un espejo del repositorio remoto:
git clone --mirror url://to/remote.git local.git
Ese comando crea un repositorio simple. Si no quieres un repositorio simple, las cosas se complican más.
Puedes usar ganchos git para eso. Simplemente crea un gancho que empuja cambiado al otro repositorio después de una actualización.
Por supuesto, es posible que tenga conflictos de fusión, por lo que debe averiguar cómo tratarlos.
Quieres hacer
git fetch origin
git reset --hard origin/master
git clean -f -d
Esto hace que su repositorio local sea exactamente igual que su repositorio remoto.
Recuerde reemplazar origen y maestro con el control remoto y la rama con la que desea sincronizar.
Si está hablando de sincronizar un repositorio bifurcado, puede seguir estos pasos.
Cómo sincronizar un repositorio de fork desde git
revisa tu rama actual de git
git branch
salida a master si no estás en master
git checkout master
Obtenga el repositorio en sentido ascendente si tiene los derechos de acceso correctos
git fetch upstream
Si está obteniendo un error por debajo, ejecute
git remote add upstream [email protected]:upstream_clone_repo_url/xyz.git
fatal: ''upstream/master'' does not appear to be a git repository fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
Ahora ejecuta el siguiente comando.
git fetch upstream
Ahora, si estás en el master, combina el upstream / master en la rama master
git merge upstream/master
¡¡Eso es!!
Verificación cruzada a través
git remote
comandogit remote
, más específicogit remote -v
Si también tengo derechos de confirmación para el repositorio ascendente, puedo crear una sucursal local ascendente y realizar el trabajo que irá ascendente allí.
git fetch --prune
-p, --pruna
Después de la captura, elimine cualquier rama de seguimiento remoto que ya no exista en el control remoto. opciones de poda