@Cascabel Significa revertir todos los cambios locales, eliminar todas las confirmaciones locales, eliminar todos los archivos y directorios nuevos locales, recuperar todos los archivos y directorios eliminados localmente, etc. En resumen, simplemente ejecute un comando como si rm -rf local_repo && git clone remote_url.
Victor
Respuestas:
820
Si quiere decir que desea que la extracción sobrescriba los cambios locales, haga la fusión como si el árbol de trabajo estuviera limpio, bueno, limpie el árbol de trabajo:
git reset --hard
git pull
Si hay archivos locales sin seguimiento que podría usar git cleanpara eliminarlos. Utilícelo git clean -fpara eliminar archivos sin seguimiento, -dfpara eliminar archivos y directorios sin seguimiento, y -xdfpara eliminar archivos o directorios sin seguimiento o ignorados.
Si, por otro lado, desea mantener las modificaciones locales de alguna manera, usaría el alijo para ocultarlas antes de tirar, luego vuelva a aplicarlas:
git stash
git pull
git stash pop
Sin embargo, no creo que tenga sentido ignorar literalmente los cambios: la mitad de la extracción es fusionar, y necesita fusionar las versiones comprometidas del contenido con las versiones que obtuvo.
Git es la cosa más extraña del mundo. Git reset --duro hecho. Luego git status: tu rama está adelante con 2 commits.
Shailen
21
@shailenTJ "Cambios locales" aquí significa cambios no confirmados, no confirmaciones locales. git reset --hardafecta a la primera, no a la segunda. Si desea restablecer completamente el estado del control remoto, git reset --hard origin/<branch>pero a menudo y en este caso, esas dos confirmaciones por las que está por delante son el trabajo que realizó, no algo que desea desechar.
Cascabel
2
Entonces, esto es lo mismo que destruir el repositorio local y volver a descargar, ¿verdad? Solo quiero poder forzar los cambios de extracción y sobrescritura para mayor comodidad. El 99% de las veces recibo este mensaje de error cuando accidentalmente he estropeado algo localmente y solo quiero comenzar de nuevo desde el repositorio.
sudo
¿Qué pasa si no es posible que no tenga un cambio local frente a la cabeza? Por ejemplo, el repositorio se realizó en un sistema de archivos que distingue entre mayúsculas y minúsculas y está clonado en un sistema de archivos que no distingue entre mayúsculas y minúsculas y hay 2 archivos con el mismo nombre y una carcasa diferente.
Me funcionó muy bien cuando tuve muchos problemas con la respuesta principal. ¡Gracias!
0x0
66
Esto funciona incluso cuando u ur se han comprometido los cambios locales, pero todavía U quiere volver
agsachin
16
Esta debería ser la respuesta principal :)
Purus
55
@Marco Servetto: Primero busca todos los cambios de git, pero aún no los aplica. Luego restablece el maestro al último estado (actualizado). Si omite el primer paso, revertirá los cambios al antiguo maestro (local). Desde mi experiencia, la forma en que lo describí, nunca causa problemas. Todos los otros intentos lo hacen al final.
Artur Barseghyan
1
Esto funcionó para mí, quería ignorar todos mis cambios locales, incluida la recuperación de archivos eliminados
Neri
28
Solo quieres un comando que dé exactamente el mismo resultado que rm -rf local_repo && git clone remote_url, ¿verdad? También quiero esta característica. Me pregunto por qué git no proporciona dicho comando (como git recloneo git sync), ni svn proporciona dicho comando (como svn recheckouto svn sync).
Eso es lo que realmente funciona, incluso cuando ya tiene confirmaciones locales que desea eliminar.
Yuri Ghensev
55
Advertencia chicos !! git clean -fxdelimina archivos de .gitignoretambién.
Ramesh Navi
@RameshNavi Claro. Esto es exactamente lo que se quiere. Lo que se desea es tener una forma más rápida de volver a clonarlo, es decir, eliminar todo el repositorio local y luego clonarlo.
Victor
27
El siguiente comando no funcionará siempre . Si solo haces:
$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.
$ git reset --hard
HEAD is now at b05f611 Here the commit message bla, bla
$ git pull
Auto-merging thefile1.c
CONFLICT (content): Merge conflict in thefile1.c
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
y así...
Para comenzar realmente de nuevo, descargar thebranch y sobrescribir todos sus cambios locales, simplemente haga lo siguiente:
$ git checkout thebranch
Already on 'thebranch'
Your branch and 'origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.
$ git reset --hard origin/thebranch
HEAD is now at 7639058 Here commit message again...
$ git status
# On branch thebranch
nothing to commit (working directory clean)
$ git checkout thebranch
Already on 'thebranch'
Mire git stash para colocar todos sus cambios locales en un "archivo stash" y volver al último commit. En ese punto, puede aplicar sus cambios escondidos o descartarlos.
git fetch
for file in `git diff origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull
El bucle for eliminará todos los archivos rastreados que se cambian en el repositorio local, por git pulllo que funcionará sin ningún problema.
Lo mejor de esto es que solo los archivos rastreados serán sobrescritos por los archivos en el repositorio, todos los demás archivos quedarán intactos.
Eso es muy similar a la respuesta de 2015 de Artur Barseghyan ... pero todavía me gustaría saber cuál es el propósito del tercer comando: los archivos de trabajo han cambiado después del segundo comando, y el tercer comando dice "Ya actualizado "
Mike roedor
esa es la única combinación que funcionó en mi entorno, tal vez estás viendo algo diferente, para mí, necesitaba los tres comandos
Pablo Pazos,
Interesante. Podría ser una cosa de versión. Estoy en git 2.7.4. Pero también acabo de ver un nuevo comentario de Artur Barseghyan: "De lo contrario, podría encontrarse trabajando en un maestro desactualizado accidentalmente".
Mike roedor
tal vez, pero lo único que puedo decir es "esto funcionó para mí cuando ninguna otra solución lo hizo", por lo que podría ayudar a otros
rm -rf local_repo && git clone remote_url
.Respuestas:
Si quiere decir que desea que la extracción sobrescriba los cambios locales, haga la fusión como si el árbol de trabajo estuviera limpio, bueno, limpie el árbol de trabajo:
Si hay archivos locales sin seguimiento que podría usar
git clean
para eliminarlos. Utilícelogit clean -f
para eliminar archivos sin seguimiento,-df
para eliminar archivos y directorios sin seguimiento, y-xdf
para eliminar archivos o directorios sin seguimiento o ignorados.Si, por otro lado, desea mantener las modificaciones locales de alguna manera, usaría el alijo para ocultarlas antes de tirar, luego vuelva a aplicarlas:
Sin embargo, no creo que tenga sentido ignorar literalmente los cambios: la mitad de la extracción es fusionar, y necesita fusionar las versiones comprometidas del contenido con las versiones que obtuvo.
fuente
git reset
sus archivos aún difieren del control remoto, lea stackoverflow.com/questions/1257592/…git reset --hard
afecta a la primera, no a la segunda. Si desea restablecer completamente el estado del control remoto,git reset --hard origin/<branch>
pero a menudo y en este caso, esas dos confirmaciones por las que está por delante son el trabajo que realizó, no algo que desea desechar.Para mí lo siguiente funcionó:
(1) Primero busque todos los cambios:
(2) Luego reinicie el maestro:
(3) Pull / actualizar:
fuente
Solo quieres un comando que dé exactamente el mismo resultado que
rm -rf local_repo && git clone remote_url
, ¿verdad? También quiero esta característica. Me pregunto por qué git no proporciona dicho comando (comogit reclone
ogit sync
), ni svn proporciona dicho comando (comosvn recheckout
osvn sync
).Pruebe el siguiente comando:
fuente
git clean -fxd
elimina archivos de.gitignore
también.El siguiente comando no funcionará siempre . Si solo haces:
y así...
Para comenzar realmente de nuevo, descargar thebranch y sobrescribir todos sus cambios locales, simplemente haga lo siguiente:
Esto funcionará bien.
fuente
fuente
Mire git stash para colocar todos sus cambios locales en un "archivo stash" y volver al último commit. En ese punto, puede aplicar sus cambios escondidos o descartarlos.
fuente
Si estás en Linux:
El bucle for eliminará todos los archivos rastreados que se cambian en el repositorio local, por
git pull
lo que funcionará sin ningún problema.Lo mejor de esto es que solo los archivos rastreados serán sobrescritos por los archivos en el repositorio, todos los demás archivos quedarán intactos.
fuente
La forma más corta de hacerlo es:
fuente
--autostash
antes, gracias!esto funcionó para mí
con la respuesta aceptada obtengo errores de conflicto
fuente
Yo suelo hacer:
En la carpeta raíz del proyecto.
fuente
Esto buscará la rama actual e intentará hacer un avance rápido para dominar:
fuente
.gitignore
"Agregar archivos no deseados a .gitignore funciona siempre y cuando no los hayas enviado inicialmente a ninguna rama".
También puedes ejecutar:
https://chamindac.blogspot.com/2017/07/ignoring-visual-studio-2017-created.html
fuente