2011-04-20 10:34:06 +0000 2011-04-20 10:34:06 +0000
235
235

¿Cómo reseteo "maestro" a "origen/maestro"?

¿Puedo hacer lo siguiente de una manera más simple?

git checkout origin/master
git branch -D master
git branch master
git checkout master

Respuestas (4)

343
343
343
2011-04-20 11:22:10 +0000

Como KindDragon ’s respuesta menciona, puedes recrear master directamente en origin/master con:

git checkout -B master origin/master

La git checkout man page menciona:

Si se da -B, <new_branch> se crea si no existe; si no, se reinicia. Este es el equivalente transaccional de

$ git branch -f <branch> [<start point>]
$ git checkout <branch>

Desde Git 2. 23+ (Agosto 2019), ya que git checkout es demasiado confuso , el nuevo comando (aún experimental) es * git switch **:

git switch -C master origin/master

Es decir:

-C <new-branch>
--force-create <new-branch>

Similar a --create, excepto que si <new-branch> ya existe, será reseteado a <start-point>.
Este es un atajo conveniente para:

$ git branch -f <new-branch>
$ git switch <new-branch>

Originalmente sugerido:

Algo como:

$ git checkout master

# remember where the master was referencing to
$ git branch previous_master

# Reset master back to origin/master
$ git reset --hard origin/master

con el paso 2 siendo opcional.

102
102
102
2014-08-24 19:30:10 +0000

Git soporta este comando:

git checkout -B master origin/master

Revisa la rama origin/master y luego reinicia la rama master allí.

30
30
30
2013-01-23 20:48:07 +0000

Creo que incluso la respuesta de VonC tiene complejidad comparada con esta opción:

git update-ref refs/heads/master origin/master
git reset --hard master

git registra automáticamente cada valor de un reflog (a través del reflog). Así que después de ejecutar ese comando, entonces master@{1} se refiere al valor anterior del maestro.

La respuesta de VonC es correcta, pero pierde tiempo en comprobar el valor anterior del maestro en el sistema de archivos.

Si te preocupan los objetos huérfanos en el repo, entonces puedes ejecutar git gc

22
22
22
2014-06-25 15:47:13 +0000

Si ya está en master puede hacer lo siguiente:

git reset --hard origin/master

Apuntará la rama local de master al remoto origin/master y descartará cualquier modificación en el directorio de trabajo.