siguientes - Git Pull ignorando cambios locales?
git pull origin master (8)
¿Hay alguna manera de hacer un git pull
que ignore los cambios en los archivos locales sin eliminar el directorio y tener que realizar un git clone
?
El comando de abajo no funciona siempre . Si lo haces solo:
$ 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 de nuevo, descargando thebranch y sobrescribiendo todos sus cambios locales, simplemente haga lo siguiente:
$ git checkout thebranch
$ git reset --hard origin/thebranch
Esto funcionará bien
$ 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''
Esto recuperará la rama actual e intentará hacer un avance rápido para dominar:
git fetch && git merge --ff-only origin/master
Mira el git stash para poner todos tus cambios locales en un "archivo de stash" y volver al último commit. En ese momento, puede aplicar sus cambios ocultos o descartarlos.
Para mí funcionó lo siguiente:
(1) Primero busca todos los cambios:
$ git fetch --all
(2) Luego reinicie el maestro:
$ git reset --hard origin/master
(3) Pull / update:
$ git pull
Si estás en Linux:
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 lo que git pull
funcionará sin problemas.
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.
Si quiere decir que desea que la barra sobrescriba los cambios locales, haciendo 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, puede usar git clean
para eliminarlos. Use git clean -f
para eliminar archivos sin -df
, -df
para eliminar archivos y directorios sin -xdf
, y -xdf
para eliminar archivos o directorios sin -xdf
o ignorados.
Si, por otro lado, quiere mantener las modificaciones locales de alguna manera, usaría el alijo para esconderlas antes de tirarlas, luego las volverá a aplicar:
git stash
git pull
git stash pop
No creo que tenga sentido ignorar literalmente los cambios, sin embargo, la mitad de la atracción es la combinación, y necesita fusionar las versiones comprometidas del contenido con las versiones que obtuvo.
Solo desea un comando que dé exactamente el mismo resultado que rm -rf local_repo && git clone remote_url
, ¿verdad? También quiero esta función. Me pregunto por qué git no proporciona dicho comando (como git reclone
o git sync
), ni svn proporciona dicho comando (como svn recheckout
o svn sync
).
Pruebe el siguiente comando:
git reset --hard origin/master
git clean -fxd
git pull
git fetch --all && git reset --hard origin/master