Estoy haciendo un git bisect
y después de llegar al compromiso problemático, ahora estoy tratando de dar un paso adelante / atrás para asegurarme de que estoy en el correcto.
yo se de HEAD^
que retrocedemos en la historia, pero ¿hay otro atajo para avanzar (hacia un compromiso específico en el futuro) así:
A - B - C(HEAD) - D - E - F
Sé que mi objetivo es F y quiero pasar de C a D .
NOTA: esto no es un duplicado de Git: cómo moverse hacia adelante y hacia atrás entre confirmaciones , mi pregunta es ligeramente diferente y no se responde allí
git checkout -b new_branch HEAD~4
para retroceder 4 confirmaciones de HEAD como en stackoverflow.com/a/4940090/911945Respuestas:
He experimentado un poco y esto parece ser el truco para navegar hacia adelante ( editar : funciona bien solo cuando tiene un historial lineal sin fusiones confirmadas):
donde
towards
es un SHA1 de la confirmación o una etiqueta.Explicación:
$()
significa: obtenga todas las confirmaciones entre la actualHEAD
y latowards
confirmación (excluyendoHEAD
), y ordénelas en el orden de precedencia (como en elgit log
predeterminado, en lugar del orden cronológico que es extrañamente el predeterminadorev-list
), y luego tome el último (tail
), es decir, al que queremos ir.git checkout
para realizar un pago.Puede definir una función accesible como un alias de espera de parámetros en su
.profile
archivo para navegar hacia la confirmación en particular:fuente
git log
muestra las confirmaciones en orden cronológico, por defecto, igual querev-list
, excepto cuando se usa la--graph
bandera.Todo lo que necesita para obtener un estado de cabeza claro, no separado, es reiniciar, no pagar.
fuente
git reset "HEAD@{1}"
en ciertas conchas como fish y powershell ...git reflog
también puede ser útil para encontrar la confirmación correcta.git reset HEAD
para volver a donde estaba ... ahora no tengo idea de en qué estado se encuentra mi repositorio y todo da miedo. ¿Qué debería hacer ahora?Creo que puedes hacer:
Para avanzar un compromiso en el tiempo. Para avanzar en varias confirmaciones, use HEAD @ {2}, HEAD @ {3}, etc.
fuente
Esto es lo que estoy usando para navegar hacia adelante y hacia atrás.
pasar a la siguiente confirmación
pasando a la confirmación anterior
fuente
git checkout <current branch>
adjunta a la última confirmación.git checkout -b <new-branch-name>
de la confirmación actual permite cambios en la nueva rama.git rebase -i
también funciona. Además , nombré min()
funciónnx()
para evitar conflictos con el administrador de versiones del nodo "n". ¡Asegúrate de comprobar los alias!Digamos que F es la última confirmación en
trunk
(inserte su propio nombre de rama aquí) ... puede referirse a él comotrunk~0
(o simplementetrunk
), E comotrunk~1
, D como,trunk~2
etc.Eche un vistazo a su reflog para ver más formas de nombrar las confirmaciones.
fuente
F
, y que sabe en qué parte del historial de esa rama desea moverse. No está tratando de avanzar en relación con HEAD, sino menos atrás en relación con el tronco.trunk~2
A?trunk
y su corrienteHEAD
son idénticas, lo que no se muestra en la pregunta, lo que he dicho que no es lo que estoy asumiendo, y que es muy poco probable a la mitad de unbisect
Atravesar hacia atrás es trivial ya que estás bajando por el árbol y siempre hay un camino por recorrer
Al atravesar hacia adelante, se está moviendo hacia arriba en el árbol, por lo que debe ser explícito a qué rama se dirige:
Uso:
git down
,git up <branch-name>
fuente
HEAD^
suele ser un valor predeterminado razonable.Si quieres ver el futuro, puedes hacer este truco, ya que Git no tiene un comando estricto para ello.
Ejemplo
Lista de hashes del historial de registros:
con el comando
git log --reverse C..
, en la salida verá B y A .fuente
Probablemente no sea la forma más agradable, pero puede usar
git log
para ver la lista de confirmaciones y luego usargit checkout [sha1 of D]
para pasar a D.fuente
Acabo de hacer una prueba sobre esto. digamos, por ejemplo, que está en la rama maestra. Entonces haga:
Entonces, la cabeza se desprende, y luego puede intentarlo nuevamente para ir a cualquier otra confirmación:
Una vez que haya terminado de mirar a su alrededor, puede volver a su estado original simplemente revisando esa sucursal. En mi ejemplo: rama maestra
Si no desea ir al estado original y desea mantener una de las confirmaciones como su cabeza y continuar desde allí, entonces debe ramificarse desde allí. por ejemplo, después de "git checkout HEAD @ {4}", puede emitir
fuente
Como solución alternativa, puede volver a HEAD con
Y luego pasa al compromiso que te gustaría, con
fuente
Si está utilizando vs code, Git history es un complemento increíble donde puede ver las confirmaciones de manera eficiente y verificar su contenido en el propio editor. mira el enlace
fuente
dónde:
branchName
es igual al nombre de la ramacommitInOrder
es igual a una confirmación en orden desde la primera confirmación en la rama seleccionada (por lo que 1 es la primera confirmación, 2 es la segunda confirmación en la rama, etc.)fuente