Rama de la confirmación anterior usando Git
-
26-09-2019 - |
Pregunta
Si tengo n confirmaciones, ¿cómo puedo pasar de la n-3 comprometerse?
puedo ver el hash de cada commit.
Solución
Se puede crear la rama a través de un hash:
git branch branchname <sha1-of-commit>
o usando una referencia simbólica:
git branch branchname HEAD~3
Para la comprobación de la rama al crearlo, el uso
git checkout -b branchname <sha1-of-commit or HEAD~3>
Otros consejos
Para hacer esto en github.com:
- Vaya a su proyecto.
- Haga clic en el "Cometa".
- Haga clic en la <> ( "Navegar por el repositorio en este momento de la historia") en el commit desea rama de.
- Haga clic en el "árbol: xxxxxx" en la parte superior izquierda. Justo debajo de la barra de estadísticas de lenguaje, obtendrá la opción de "Buscar o Crear Rama" (sólo tiene que escribir un nuevo nombre de la sucursal allí)
La magia se puede hacer por git reset .
-
Crea una nueva rama y el interruptor a la misma (por lo que todas sus últimas confirmaciones se almacenan aquí)
git checkout -b your_new_branch
-
Cambiar a volver a su sucursal de trabajo anterior (asumir que es maestro)
git checkout master
-
Eliminar las últimas x confirmaciones, mantener limpia maestro
git reset --hard HEAD~x # in your case, x = 3
A partir de este momento, todos los últimos x cometa, está sólo en la nueva rama, no en su rama anterior de trabajo (principal) más.
Si no está seguro de qué comprometerse desea rama de antelación se puede comprobar compromete fuera y examinar su código (véase la fuente, compilación, prueba) por
git checkout <sha1-of-commit>
Una vez que encuentre el comprometerse desea rama de usted puede hacerlo desde dentro del compromiso (es decir, sin tener que volver a la primera maestra) simplemente mediante la creación de una rama de la forma habitual:
git checkout -b <branch_name>
git checkout -b <branch-name> <sha1-of-commit>
Simplemente ejecute:
git checkout -b branch-name <commit>
Por ejemplo:
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
El comando checkout
con el parámetro -b
creará una nueva rama y que va a cambiar que a él
Para hacer esto en Eclipse:
- Vaya a "Git Repository Exploring" Perspectiva.
- Ampliar "etiquetas" y elige el envío de datos desde la que desea crear rama.
- Haga clic derecho sobre la confirmación y seleccione "Crear Rama".
- Proporcionar un nombre de la sucursal.
Se va a crear una sucursal local para usted. Entonces cada vez que se presiona sus cambios, su rama se inserta en el servidor remoto.
Una gran pregunta relacionada es: ¿Cómo diablos qué resolver esto mediante la opción --help
de git? Vamos a probar esto:
git branch --help
Nos 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.
búsqueda entre el texto que sigue a la palabra "compromiso". Nos encontramos con 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, se centran en esta línea de la galimatías:
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
Condensar que a esto:
git branch <branchname> [<start-point>]
Y hecho.
Puede hacerlo en las pertenencias.
- Haga clic en el commit
- En la parte superior derecha de la pantalla haga clic en "Marcar esta confirmación"
- A continuación, puede crear la nueva rama de la etiqueta que acaba de crear.
Yo era capaz de hacerlo de esta manera:
git branch new_branch_name `git log -n 1 --skip 3 --format=%H`
Cuando se debe introducir el valor de salto. 0 es la última, 1 es el anterior, el 2 es el commit antes de eso, etc.
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 viejo y cometer perteneciente a la rama master
.
Ir a una confirmación en concreto de un repositorio git
A veces, cuando se trabaja en un repositorio git desea volver a una determinada comprometerse (revisión) para tener una instantánea de su proyecto en un momento específico. Para hacer que todo lo que el hash SHA-1 de la cometen los que se puede encontrar fácilmente comprobar el registro con el comando necesita:
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 ya sabe el hash del cometen quiere ir a usted puede utilizar uno de los 2 comandos siguientes:
git checkout HASH
o
git reset --hard HASH
Pedido
git checkout <commit> <paths>
Le dice a Git para reemplazar el actual estado de los caminos con su estado en el commit dado. Las rutas pueden ser archivos o directorios.
Si no se da ninguna de las ramas, git asume cometer la cabeza.
git checkout <path> // restores path from your last commit. It is a 'filesystem-undo'.
Si se da la ruta, Git mueve HEAD
a lo dado comprometerse (cambiando así la cometéis está sentado y trabajando).
git checkout branch //means switching branches.
Restablecer
git reset <commit> //re-sets the current pointer to the given commit.
Si usted está en una rama (por lo general debe ser), y HEAD
esta rama se mueven a cometer.
Si se encuentra en estado HEAD
individual, git reset no sólo se mueven HEAD
. Para restablecer una rama, en primer lugar comprobar que funciona.
Si usted quiere saber más acerca de la diferencia entre git reset y git checkout Yo recomendaría leer git el blog oficial .
Para hacer la respuesta aceptada en Visual Studio 2015 y 2017:
Haga clic en alteraciones (flecha roja arriba)
Haga clic en Acciones (flecha roja arriba) y haga clic en Ver historial en el menú desplegable
Y nueva pestaña se abrirá:
Y usted debe pulsar en el confirmación anterior que desea que su código para volver a:
Escoja a la caja de una nueva rama y listo!
A continuación, aunque no forma parte de la pregunta OP, pero lo hacen tanto mucho y este es un paso truco, al menos para mí: si desea volver a una confirmación anterior, sin pago y envío de una nueva rama, no elija revertir(!?); usted debe elegir redefinir --mixed o --hard:
si utiliza árbol de código fuente que es bastante sencillo.
- Haga clic derecho en el envío de datos desde donde se tiene que crear una nueva rama
- Haga clic en 'rama'
- Nombre Tipo de nueva sucursal en el cuadro de diálogo apareció y haga clic en 'Crear rama'
Esto crea la rama con un solo comando:
git push origin <sha1-of-commit>:refs/heads/<branch-name>
Yo prefiero esta forma mejores que los publicados anteriormente, ya que crea la rama de inmediato (no requiere un comando de impulso adicional después).
Si usted está buscando una solución basada en la línea de comandos, puede ignorar mi respuesta. Me va a sugerir que use GitKraken . Es un cliente de interfaz de usuario git extraordinaria. Se muestra el árbol de Git en la página principal. Usted puede mirar en ellos y saber lo que está pasando con el proyecto. Sólo elige comprometerse específica, haga clic en él y seleccione la opción 'Crear una sucursal aquí'. Se le dará un cuadro de texto para introducir el nombre de la sucursal. Introduzca nombre de la sucursal, seleccione 'OK' y ya está. Es realmente muy fácil de usar.