Pregunta Restablecer la rama de repositorio local para que sea como el repositorio remoto HEAD


¿Cómo puedo restablecer mi rama local para que sea como la sucursal en el repositorio remoto?

Yo si:

git reset --hard HEAD

Pero cuando ejecuto un git status,

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

¿Puedes decirme por qué tengo estos 'modificados'? No he tocado estos archivos? Si lo hiciera, quiero eliminarlos.


2515
2017-10-27 00:27


origen


Respuestas:


Configurar su rama para que coincida exactamente con la rama remota se puede hacer en dos pasos:

git fetch origin
git reset --hard origin/master

Si desea guardar el estado de su sucursal actual antes de hacer esto (por si acaso), puede hacer:

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

Ahora su trabajo se guarda en la rama "my-saved-work" en caso de que decida que lo quiere de nuevo (o quiere verlo más tarde o diferirlo contra su rama actualizada).

Tenga en cuenta que en el primer ejemplo se supone que el nombre del repositorio remoto es "origen" y que la rama denominada "principal" en el repositorio remoto coincide con la rama actualmente pagada en su repositorio local.

Por cierto, esta situación en la que te encuentras se parece muchísimo a un caso común en el que se ha realizado un esfuerzo en la rama actualmente desprotegida de un repositorio no vacío. ¿Recientemente presionó en su repositorio local? Si no es así, entonces no hay problema: otra cosa debe haber causado que estos archivos terminen de forma inesperada modificados. De lo contrario, debe tener en cuenta que no se recomienda insertar en un repositorio no vacío (y no en la rama actualmente desprotegida, en particular).


4460
2017-10-27 01:44



Necesitaba hacer (la solución en la respuesta aceptada):

git fetch origin
git reset --hard origin/master

Seguido por:

git clean -f

para eliminar archivos locales

Para ver qué archivos se eliminarán (sin eliminarlos realmente):

git clean -n -f

250
2017-12-27 06:20



En primer lugar, restablecer a la previamente obtenida HEAD de la rama ascendente correspondiente:

git reset --hard @{u}

La ventaja de especificar @{u} o su forma verbosa @{upstream} es que el nombre del repositorio y la sucursal remotos no tienen que estar explícitamente especificados.

A continuación, según sea necesario, elimine los archivos sin seguimiento, opcionalmente también con -x:

git clean -df

Finalmente, según sea necesario, obtenga los últimos cambios:

git pull

118
2018-02-10 20:27



git reset --hard HEAD en realidad solo se restablece al último estado comprometido. En este caso, HEAD se refiere a la CABEZA de su rama.

Si tienes varias confirmaciones, esto no funcionará ...

Lo que probablemente desee hacer es restablecer al jefe de origen o lo que sea que se llame a su repositorio remoto. Probablemente haga algo como

git reset --hard origin/HEAD

Ten cuidado, sin embargo. Los restablecimientos fuertes no se pueden deshacer fácilmente. Es mejor hacer lo que Dan sugiere y ramificar una copia de tus cambios antes de reiniciar.


91
2017-10-27 01:08



Todo lo anterior sugiere que es correcto, pero a menudo para De Verdad reinicie su proyecto, también necesita eliminar incluso los archivos que están en su .gitignore.

Para obtener el equivalente moral de borrando su directorio de proyecto y re-clonando desde el control remoto es:

git fetch
git reset --hard
git clean -x -d -f

Advertencia: git clean -x -d -f es irreversible y puede perder archivos y datos (por ejemplo, cosas que ha ignorado usando .gitignore)


57
2017-07-23 17:48



La pregunta mezcla dos problemas aquí:

  1. cómo restablecer una sucursal local al punto donde está el control remoto
  2. cómo borrar su área de preparación (y posiblemente el directorio de trabajo), de modo que git statusdice nothing to commit, working directory clean.

La respuesta única es:

  1. git fetch --prune  (opcional) Actualiza la instantánea local del repositorio remoto. Los comandos adicionales son solo locales.
    git reset --hard @{upstream}Coloca el puntero de la bifurcación local en el lugar donde se encuentra la instantánea del control remoto, y establece el índice y el directorio de trabajo en los archivos de esa confirmación.
  2. git clean -d --force  Elimina los archivos y directorios no rastreados que impiden que git diga "limpiar el directorio de trabajo".

29
2018-01-31 01:29



Esto es algo a lo que me enfrento regularmente, y he generalizado el script que Wolfgang proporcionó anteriormente para trabajar con cualquier rama

También agregué un mensaje "¿estás seguro?" Y algunos comentarios

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# AT 2012-11-09
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
branchname=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
read -p "Reset branch $branchname to origin (y/n)? "
[ "$REPLY" != "y" ] || 
echo "about to auto-commit any changes"
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  echo "Creating backup auto-save branch: auto-save-$branchname-at-$timestamp"
  git branch "auto-save-$branchname-at-$timestamp" 
fi
echo "now resetting to origin/$branchname"
git fetch origin
git reset --hard origin/$branchname

20
2017-11-09 13:01