Quiero sincronizar mi repositorio local con uno remoto para que mi repositorio local se convierta en una copia del 100% del remoto, lo que significa que si ciertos archivos difieren en estos repositorios, anulamos los locales con los remotos, y si hay archivos en repositorios locales que no existen en el control remoto, los archivos locales se eliminan.
¿Hay alguna manera de lograr eso que no sea haciendo un nuevo clon de repositorio remoto?
Pregunta similar a Sync local git repo with remote in one shot descartando cambios / confirmaciones locales .
git fetch --prune
Respuestas:
fuente
git pull -p
hace lo mismo: 'git pull ejecuta git fetch con los parámetros dados y llama a git merge para fusionar las cabezas de rama recuperadas en la rama actual' - git-scm.com/docs/git-pullgit fetch <remote> --prune
, en caso de que alguien solo necesite--prune
un control remoto específico. p.ej.git fetch upstream --prune
.git fetch origin --prune
sincronizar tu repositorio local con tu tenedor de unupstream
proyectoEstos pasos lo harán:
entonces sin
-n
Esto se encargará de todos los cambios locales. Ahora los commits ...
y tenga en cuenta la línea como:
Tome nota del número 'N' ahora:
y finalmente:
no debe mostrar nada para agregar / confirmar. Todo limpio.
Sin embargo, un clon nuevo puede hacer lo mismo (pero es mucho más lento).
=== Actualizado ===
A medida que mi conocimiento de git mejoró ligeramente con el tiempo, se me ocurrió otra forma más simple de hacer lo mismo. Aquí está cómo (#con explicación). Mientras estás en tu rama de trabajo:
Aunque sus confirmaciones y cambios locales desaparecerán de la vista después de esto, es posible recuperar los cambios confirmados, si es necesario.
fuente
Debe comprender que un repositorio de Git no es solo un árbol de directorios y archivos, sino que también almacena un historial de esos árboles, que pueden contener ramas y fusiones.
Al buscar desde un repositorio, copiará todas o algunas de las ramas allí a su repositorio. Estos se encuentran en su repositorio como "ramas de seguimiento remoto", por ejemplo, ramas denominadas como
remotes/origin/master
o tal.Obtener nuevas confirmaciones del repositorio remoto no cambiará nada sobre su copia de trabajo local.
Su copia de trabajo normalmente tiene un commit verificado, 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 conflictos 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 la usagit reset
para cambiarla a la rama remota recuperada. (git pull
incorporará todas las actualizaciones de la rama remota en su local, lo que podría hacer lo mismo, o creará una confirmación de fusión si tiene confirmaciones locales).(Pero entonces realmente perderá cualquier cambio local, tanto en la copia de trabajo como en las confirmaciones locales. Asegúrese de que realmente desea esto; de lo contrario, use mejor una nueva rama, esto guarda sus confirmaciones locales. Y úsela
git stash
para guardar los cambios que aún no se han confirmado .)Editar: si solo tiene una sucursal local y está rastreando una sucursal remota, todo lo que necesita hacer es
desde dentro del directorio de trabajo.
Esto buscará 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.
fuente
git pull
debería ser suficiente, creo. (Actualicé la respuesta.)Quieres hacer
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.
fuente
node_modules
, funciona exactamente como quiero.Restablecer y sincronizar el repositorio local con la sucursal remota
El comando: Recuerde reemplazar origen y maestro con el control remoto y la rama con la que desea sincronizar.
O paso a paso:
Su sucursal local ahora es una copia exacta (confirmaciones y todo) de la sucursal remota.
Salida de comando:
Aquí hay un ejemplo de cómo ejecutar el comando en un clon local del repositorio Forge a git.
fuente
(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:
git branch -r
)git fetch
. Esto no afectará a ninguna de sus ramas existentes, creadas a medida.git add origin /path/to/repository
) el usogit checkout origin/branch_name
, esto anulará los cambios locales en la sucursalbranch_name
fuente
Parece que quieres un espejo del repositorio remoto:
Ese comando crea un repositorio desnudo. Si no quieres un repositorio simple, las cosas se vuelven más complicadas.
fuente
Si está hablando de sincronizar un repositorio bifurcado, puede seguir estos pasos.
Cómo sincronizar un repositorio de fork desde git
verifica tu rama actual de git
git branch
checkout a master si no estás en master
git checkout master
Obtenga el repositorio ascendente si tiene los derechos de acceso correctos
git fetch upstream
Si obtiene el siguiente error, ejecute
git remote add upstream [email protected]:upstream_clone_repo_url/xyz.git
Ahora ejecuta el siguiente comando.
git fetch upstream
Ahora, si está en el maestro, combine el flujo ascendente / maestro en la rama maestra
git merge upstream/master
¡¡Eso es!!
Crosscheck a través del
git remote
comando, más específicogit remote -v
Si también tengo derechos de compromiso para el repositorio ascendente, puedo crear una sucursal local ascendente y hacer el trabajo que irá allí.
fuente
Puedes usar git hooks para eso. Simplemente cree un gancho que empuje cambiado al otro repositorio después de una actualización.
Por supuesto, es posible que tenga conflictos de fusión, por lo que debe pensar cómo lidiar con ellos.
fuente