¿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
¿Puedo hacer lo siguiente de una manera más simple?
git checkout origin/master
git branch -D master
git branch master
git checkout master
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.
Git soporta este comando:
git checkout -B master origin/master
Revisa la rama origin/master
y luego reinicia la rama master
allí.
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