Si tengo n commits, ¿cómo puedo ramificar desde el n-3 commit?
Puedo ver el hash de cada commit.
Si tengo n commits, ¿cómo puedo ramificar desde el n-3 commit?
Puedo ver el hash de cada commit.
Respuestas:
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 pagar la rama al crearla, use
git checkout -b branchname <sha1-of-commit or HEAD~3>
git push origin BRANCH_NAME
<sha1-of-commit>
ejecución git checkout -b <name-of-branch> <sha1-of-commit>
pero si la rama ya existegit checkout -B <name-of-branch> <sha1-of-commit>
Para hacer esto en github.com:
La magia se puede hacer mediante git reset .
Cree una nueva rama y cámbiela (para que todas sus últimas confirmaciones estén almacenadas aquí)
git checkout -b your_new_branch
Vuelva a su rama de trabajo anterior (suponga que es maestra)
git checkout master
Elimine las últimas confirmaciones x, mantenga el maestro limpio
git reset --hard HEAD~x # in your case, x = 3
A partir de este momento, todas las últimas confirmaciones x están solo en la nueva rama, ya no en su rama de trabajo anterior (maestra).
git reset --hard
no es una buena idea si ya ha empujado el origen se comprometen a ...
git push --force
hacerlo si ya había empujado la rama antes
Si no está seguro de qué confirmación desea bifurcar de antemano, puede verificar las confirmaciones y examinar su código (ver fuente, compilar, probar)
git checkout <sha1-of-commit>
una vez que encuentre la confirmación de la que desea bifurcarse, puede hacerlo desde la confirmación (es decir, sin volver al maestro primero) simplemente creando una bifurcación de la manera habitual:
git checkout -b <branch_name>
git checkout -b <branch-name> <sha1-of-commit>
git branch branchname <sha1-of-commit>
" (de la respuesta aceptada)?
git checkout -b
para crear una nueva sucursal.
Una forma rápida de hacerlo en su repositorio de Github sería la siguiente:
Simplemente ejecute:
git checkout -b branch-name <commit>
Por ejemplo :
git checkout -b import/january-2019 1d0fa4fa9ea961182114b63976482e634a8067b8
El checkout
comando con el parámetro -b
creará una nueva rama Y lo cambiará a él
git fetch
y git branch
ordene en la carpeta de su proyecto utilizando el terminal, luego verifique si la rama de la característica existe, si este es el caso, entonces sí, por supuesto que no podrá crear una rama a partir de ramas eliminadas, también podría revertir la eliminación de una rama en caso de que rama se fue
Una gran pregunta relacionada es: ¿Cómo diablos lo resuelves usando la --help
opción 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 "commit". 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, concéntrate en esta línea del gobbledegook:
git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
Condense eso a esto:
git branch <branchname> [<start-point>]
Y hecho.
Para hacer esto en Eclipse:
Creará una sucursal local para usted. Luego, cada vez que envíe sus cambios, su sucursal se enviará al servidor remoto.
Puedes hacerlo en Stash.
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 el commit anterior, etc.
HEAD~1
(donde 1 especifica 1 commit back)?
Esto crea la rama con un comando:
git push origin <sha1-of-commit>:refs/heads/<branch-name>
Prefiero esta manera mejor que las publicadas anteriormente, porque crea la rama inmediatamente (no requiere un comando de inserción adicional después).
Usando Sourcetree | La forma más fácil.
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
was y old commit pertenecientes a la master
sucursal.
Ir a un commit particular de un repositorio git
A veces, cuando se trabaja en un repositorio de git, desea volver a una confirmación específica (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 del commit que puede encontrar fácilmente revisando el registro con el comando:
git log --abbrev-commit --pretty=oneline
que le dará una lista compacta de todos los commits y la versión corta del hash SHA-1.
Ahora que conoce el hash del commit al 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 el commit dado. 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 ninguna ruta, git se 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 estarlo), HEAD
y esta rama se mueve para confirmar.
Si está en HEAD
estado desconectado , git reset solo se mueve HEAD
. Para restablecer una rama, primero compruébelo.
Si desea saber más sobre la diferencia entre git reset y git checkout, le recomendaría que lea el blog oficial de git .
git log --abbrev-commit --pretty=oneline
se pueden abreviar agit log --oneline
Para los usuarios de Git GUI, puede visualizar todo el historial (si es necesario) y luego hacer clic con el botón derecho en el compromiso del que desea bifurcarse e ingresar el nombre de la bifurcación.
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 se abrirá una nueva pestaña:
Y debe hacer clic derecho en la confirmación anterior a la que desea que su código vuelva:
Elija pagar una nueva sucursal y ¡listo!
A continuación, aunque no es parte de la pregunta de OP, pero hago mucho y este es un paso engañoso, al menos para mí: si desea volver a una confirmación anterior, sin pagar una nueva rama, ¡NO elija revertir (! ?); debe elegir redefinir --mixed o --hard:
si usas el árbol fuente es bastante sencillo.
Si está buscando una solución basada en la línea de comandos, puede ignorar mi respuesta. Te voy a sugerir que uses GitKraken . Es un extraordinario git UI client. Muestra el árbol Git en la página de inicio. Puedes mirarlos y saber qué está pasando con el proyecto. Simplemente seleccione una confirmación específica, haga clic derecho sobre ella y seleccione la opción 'Crear una rama aquí'. Le dará un cuadro de texto para ingresar el nombre de la sucursal. Ingrese el nombre de la sucursal, seleccione 'Aceptar' y estará listo. Es realmente muy fácil de usar.