Git: establece la punta de una twig en un compromiso particular

Supongamos que uno tiene una twig llamada my-branch con tres commits como este:

aaa bbb ccc 

Al principio, la punta de mi twig apunta a aaa. Si uno hace un git reset --hard HEAD^ la punta empezará a apuntar a bbb. El mismo command hará que la punta de my-branch apunte a ccc. ¿Cómo se puede señalar la punta nuevamente en aaa o bbb?

Una opción sería hacer checkout aaa o bbb (separar HEAD) y luego verificar una nueva twig, decir new-branch , borrar my-branch y usar la nueva. También supongo que algo como git branch -f my-branch bbb debería funcionar, pero cuando pruebo esto, obtengo

 fatal: Cannot force update the current branch. 

¿Alguna otra idea?

Puede ejecutar git reset --hard <commit-ID> para volver a ajustar la twig actual. Utilice el reflog para encontrar la ID, si es necesario, o, incluso más simple, si el reflog dice que esto es (por ejemplo) [email protected]{2} , simplemente git reset --hard [email protected]{2} (tenga en count que cada git reset renumera el n en @{ n } ).

El método de git merge en la respuesta de Francisco Puga también funciona bien si esa fusión es una fusión de avance rápido. (Si eliges uno equivocado, obtendrás una combinación real, que está bien si eso es lo que quieres, o puedes git reset --hard HEAD^ para deshacerlo si no). Otra vez puedes dar el SHA-1 sin formatting o el nombre de reflog Como una ventaja adicional:

git merge --ff-only id

solo "deslizará el nombre de la twig hacia adelante" (hacia un nuevo consejo como aaa o bbb ), nunca realice una fusión "regular", por lo que es una buena forma de asegurarse de que está utilizando una ID adecuada.

Si esos commits están presentes en otra twig, por ejemplo, master , puedes usar git merge para volver a my-branch .

Para restaurar la confirmación con hash bbb en my-branch , use

 git checkout my-brach git merge bbb 

Si esos commits ya no están presentes en sus sucursales, debe usar git reflog .

Puede establecer la punta de una bifurcación en una confirmación particular utilizando expresiones sha1 basadas en la date, como "branchname @ {yesterday}"

Por ejemplo, git checkout testbranch @ {ayer}

Sin embargo, esto dará como resultado un estado HEAD separado, como ya lo mencionó.

En primer lugar, debe verificar en bbb para evitar el post " fatal: no se puede forzar la actualización de la twig actual ". Luego puede cambiar HEAD a bbb con branch -f . Finalmente, check-out a esta twig, de lo contrario, se encontrará en HEAD.

Entonces, haz lo siguiente:

 git co bbb git branch -f my-branch bbb git co my-branch 

.

 Before: After: >aaa aaa bbb >bbb ccc ccc