Digamos que el control remoto es origin
y la rama es master
, y digamos que ya se ha master
cerrado, podría intentar lo siguiente:
git fetch origin
git reset --hard origin/master
Básicamente, esto solo toma la rama actual y la apunta a la HEAD
rama remota.
ADVERTENCIA : Como se indica en los comentarios, esto eliminará sus cambios locales y sobrescribirá con lo que sea que esté en el origen .
O puede usar los comandos de plomería para hacer esencialmente lo mismo:
git fetch <remote>
git update-ref refs/heads/<branch> $(git rev-parse <remote>/<branch>)
git reset --hard
EDITAR: Me gustaría explicar brevemente por qué funciona esto.
los .git
carpeta puede contener las confirmaciones de cualquier número de repositorios. Dado que el hash de confirmación es en realidad un método de verificación del contenido de la confirmación, y no solo un valor generado aleatoriamente, se utiliza para hacer coincidir los conjuntos de confirmación entre repositorios.
Una rama es solo un puntero con nombre a un hash dado. Aquí hay un conjunto de ejemplos:
$ find .git/refs -type f
.git/refs/tags/v3.8
.git/refs/heads/master
.git/refs/remotes/origin/HEAD
.git/refs/remotes/origin/master
Cada uno de estos archivos contiene un hash que apunta a una confirmación:
$ cat .git/refs/remotes/origin/master
d895cb1af15c04c522a25c79cc429076987c089b
Estos son todos para el mecanismo de almacenamiento interno de git y funcionan independientemente del directorio de trabajo . Haciendo lo siguiente:
git reset --hard origin/master
git apuntará a la rama actual al mismo valor hash al que apunta el origen / maestro. Luego cambia con fuerza el directorio de trabajo para que coincida con la estructura / contenido del archivo en ese hash.
Para ver esto en funcionamiento, siga adelante y pruebe lo siguiente:
git checkout -b test-branch
# see current commit and diff by the following
git show HEAD
# now point to another location
git reset --hard <remote>/<branch>
# see the changes again
git show HEAD
He tenido suerte con
en una situación similar.
http://www.kernel.org/pub//software/scm/git/docs/git-checkout.html
Deshacer la eliminación en GIT
fuente
Resuelto, usando el siguiente conjunto de comandos:
El truco consiste en reajustar los cambios ... Tuvimos algunos problemas para reajustar una confirmación trivial, por lo que simplemente la omitimos usando git rebase --skip (después de haber copiado los archivos).
fuente
Si alguna vez tiene este problema después de ejecutar un
git fetch
y luego git no le permite ejecutargit pull
debido a un conflicto de fusión ( ambos archivos modificados / no fusionados , y para frustrarlo más, no le mostrará ningún marcador de conflicto en el archivo ya que aún no está combinado). Si no desea perder su trabajo, puede hacer lo siguiente.preparar el archivo.
luego esconde los cambios locales.
extraer y actualizar su directorio de trabajo
restaure su archivo local modificado (git se fusionará automáticamente si puede, de lo contrario, resuélvalo)
Espero que te ayude.
fuente
Existe una solución incluso si no desea eliminar sus cambios locales. Simplemente arregle los archivos no fusionados (por
git add
ogit remove
). Entonces hazlogit pull
.fuente
Suponiendo que desea deshacerse de los cambios que tenga, primero verifique el resultado de
git status
. Para cualquier archivo que diga "no combinado" junto a él, ejecutegit add <unmerged file>
. Luego sigue congit reset --hard
. Eso eliminará cualquier cambio local, excepto los archivos sin seguimiento.fuente
git status
?git rebase --abort
ygit pull --rebase
según la sugerencia de gitMe resolví con git eliminar el archivo no combinado localmente.
Cuando envío git commit después:
fuente
La respuesta de Ryan Stewart casi estaba ahí. En el caso de que realmente no desee eliminar sus cambios locales, hay un flujo de trabajo que puede usar para fusionar:
git status
. Le dará una lista de archivos no fusionados.git commit
Git confirmará solo las fusiones en una nueva confirmación. (En mi caso, tenía archivos agregados adicionales en el disco, que no se agruparon en esa confirmación).
Luego, Git considera que la fusión fue exitosa y le permite seguir adelante.
fuente