ver - Rama de un commit anterior usando Git
ver ramas git (13)
Si tengo n confirmaciones, ¿cómo puedo pasar de la confirmación n-3?
Puedo ver el hash de cada cometer.
Esto es lo que hice:
C:/Users/[path]/build>git checkout -b responsivenavigation 8a75b001096536b3216022484af3026aa9c7bb5b
Switched to a new branch ''responsivenavigation''
C:/Users/jaimemontoya/Dropbox/CuponClub/androidapp/build>git branch
master
* responsivenavigation
En este caso, 8a75b001096536b3216022484af3026aa9c7bb5b
era un antiguo compromiso que pertenecía a la rama master
.
La magia se puede hacer por git reset .
Cree una nueva rama y cámbiela (para que todas sus últimas confirmaciones se almacenen aquí)
git checkout -b your_new_branch
Vuelve a tu rama de trabajo anterior (asume que es maestro)
git checkout master
Eliminar las últimas x confirmaciones, mantener limpio maestro
git reset --hard HEAD~x # in your case, x = 3
A partir de este momento, todas las últimas x confirmaciones están solo en la nueva rama, ya no en su rama de trabajo anterior (maestra).
Para hacer esto en Eclipse:
- Vaya a la perspectiva "Exploración del repositorio Git".
- Expanda "Etiquetas" y elija la confirmación desde la que desea crear la rama.
- Haga clic derecho en la confirmación y seleccione "Crear rama".
- Proporcionar un nombre de rama.
Creará una sucursal local para usted. Luego, cada vez que presione sus cambios, su rama se enviará al servidor remoto.
Para hacer esto en github.com:
- Ve a tu proyecto.
- Haga clic en el botón "Cometer".
- Haga clic en <> ("Examinar el repositorio en este punto del historial") en la confirmación de la que desea bifurcar.
- Haga clic en el "árbol: xxxxxx" arriba en la parte superior izquierda. Justo debajo de la barra de estadísticas de idioma, obtendrás la opción de "Buscar o crear una rama" (simplemente escribe un nuevo nombre de rama allí)
Pude hacerlo así:
git branch new_branch_name `git log -n 1 --skip 3 --format=%H`
Donde debe ingresar el valor de omisión. 0 es el último, 1 es el anterior, 2 es la confirmación anterior, etc.
Puedes crear la rama a través de un hash:
git branch branchname <sha1-of-commit>
O utilizando una referencia simbólica:
git branch branchname HEAD~3
Para pagar la rama al crearla, use
git checkout -b branchname <sha1-of-commit or HEAD~3>
Puedes hacerlo en Stash.
- Haga clic en el compromiso
- En la parte superior derecha de la pantalla, haga clic en "Etiquetar este compromiso"
- A continuación, puede crear la nueva rama a partir de la etiqueta que acaba de crear.
Si no está seguro de qué compromiso desea bifurcar por adelantado, puede verificar los compromisos y examinar su código (ver fuente, compilación, prueba) por
git checkout <sha1-of-commit>
Una vez que encuentre la confirmación de la que desea derivar, puede hacerlo desde la confirmación (es decir, sin volver al maestro primero) simplemente creando una rama de la forma habitual:
git checkout -b <branch_name>
Una gran pregunta relacionada es: ¿Cómo diablos lo solucionas usando la opción --help
de git? Intentemos esto:
git branch --help
Vemos esta salida:
NAME
git-branch - List, create, or delete branches
SYNOPSIS
git branch [--color[=<when>] | --no-color] [-r | -a]
[--list] [-v [--abbrev=<length> | --no-abbrev]]
[--column[=<options>] | --no-column]
[(--merged | --no-merged | --contains) [<commit>]] [--sort=<key>]
[--points-at <object>] [<pattern>...]
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
git branch --unset-upstream [<branchname>]
git branch (-m | -M) [<oldbranch>] <newbranch>
git branch (-d | -D) [-r] <branchname>...
git branch --edit-description [<branchname>]
Gobbledegook.
Busque en el texto posterior la palabra "cometer". Encontramos esto:
<start-point>
The new branch head will point to this commit. It may be given as a branch name, a
commit-id, or a tag. If this option is omitted, the current HEAD will be used instead.
¡Estamos llegando a alguna parte!
Ahora, enfócate en esta línea del libro engullido:
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
Condense que a esto:
git branch <branchname> [<start-point>]
Y hecho.
Ir a un commit particular de un repositorio git
A veces, al trabajar en un repositorio de git, desea volver a un compromiso específico (revisión) para tener una instantánea de su proyecto en un momento específico. Para hacerlo, todo lo que necesita es el hash SHA-1 de la confirmación, que puede encontrar fácilmente consultando el registro con el comando:
git log --abbrev-commit --pretty=oneline
que le dará una lista compacta de todas las confirmaciones y la versión corta del hash SHA-1.
Ahora que conoce el hash de la confirmación a la que desea ir, puede usar uno de los siguientes 2 comandos:
git checkout HASH
o
git reset --hard HASH
revisa
git checkout <commit> <paths>
Le dice a git que reemplace el estado actual de las rutas con su estado en la confirmación dada. Las rutas pueden ser archivos o directorios.
Si no se da ninguna rama, git asume el compromiso HEAD.
git checkout <path> // restores path from your last commit. It is a ''filesystem-undo''.
Si no se proporciona una ruta, git mueve HEAD
a la confirmación dada (cambiando así la confirmación en la que está sentado y trabajando).
git checkout branch //means switching branches.
Reiniciar
git reset <commit> //re-sets the current pointer to the given commit.
Si está en una rama (normalmente debería estar), HEAD
y esta rama se moverán para confirmar.
Si se encuentra en estado HEAD
desconectado, git reset solo mueve HEAD
. Para restablecer una rama, primero echa un vistazo.
Si quisiera saber más sobre la diferencia entre el reinicio de git y el checkout de git, recomendaría leer el blog oficial de git .
git checkout -b <branch-name> <sha1-of-commit>