etiquetas - git tags best practices
En git, ¿cómo puedo encontrar la revisión en la que se creó una rama? (4)
Desde que agregó un repositorio git ... Trabajé de forma remota para hacer las cosas a prueba.
¿Cómo puedo localizar fácilmente rev "b0430cee"?
En ese caso, este bonito oneliner hizo el trabajo por mí:
git rev-list --reverse --topo-order --left-right --boundary 1.0...master |
grep "^>" -B1 |
head -1 |
cut -c2-
Si en su lugar quería obtener 469c14a1fa8a40237700 ( New feature work
), esto funciona para mí:
git rev-list --reverse --topo-order --left-right --boundary 1.0...master |
grep "^>" |
head -1 |
cut -c2-
HTH
ACTUALIZACIÓN: repositorio de ejemplo, https://github.com/so-gitdemo/so-gitdemorepo
En el contexto del repositorio github. ¿Cómo puedo localizar fácilmente rev "b0430cee"? Sé que solo puedo mirar, pero el ejemplo real de que este repositorio de imitadores tiene una docena de confirmadores y muchas otras sucursales. No es tan fácil de usar la inspección.
¿Cómo puedo encontrar la revisión de creación de rama cuando la rama se ha fusionado varias veces?
Soy consciente de esta pregunta: ¿Cómo determinar cuándo se creó una sucursal de Git?
La solución no parece funcionar para una rama que se ha fusionado varias veces. Por lo general, las correcciones de errores se fusionan desde la rama de lanzamiento a la rama principal. Tal vez incluso estamos haciendo esta parte mal ... todavía es nuevo para git.
Imagina lo siguiente simple. La cosa real tiene MUCHOS más compromisos en el maestro / rama de varias personas. También hay varias ramas de lanzamiento (piense 1.0, 1.1, 1.2, 1.3)
Future dev ?
|
|
Merge 1.0 back * ? Potential future fixes
|/ |
| /|
| /
New work * |
| * Emergency bug fix
| |
Merge 1.0 back * |
|/ |
| /|
| * Another bug fix
| |
| |
New feature * * First bugfix on branch 1.0
| /
| /
|/
* Feature
|
|
|
* Some feature
|
|
|
* The past (master)
Todavía somos nuevos en git y estamos trabajando en la mejor manera de administrar lanzamientos y sucursales, y hemos decidido que necesitamos agregar algunas etiquetas al repositorio de manera retroactiva. Como una etiqueta 1.0 para el inicio de la rama 1.0 y las posteriores 1.0.1 para las versiones de corrección de errores.
Pregunta de seguimiento adicional: ¿Cuál es la mejor manera de agregar las etiquetas que quiero? y en qué revisión debo etiquetar? primero cometer en nueva rama? ¿o primer compromiso común antes de confirmar la rama?
Es muy fácil agregar etiquetas retroactivamente en git. Todo lo que necesitas hacer es dar el comando sha1 hash to git tag (gracias Sehe):
git tag 1.0 abcd1232
git push origin 1.0
Es difícil responder tu segunda pregunta, ya que es difícil definir qué es "mejor". En el trabajo tenemos una rama de desarrollo con la que todos trabajamos y cuando decidimos que queremos lanzar, creamos una rama de lanzamiento, por ejemplo, rel-1.0 y esa rama se mantiene activa hasta que decidimos que hemos terminado con ella. Luego lo fusionamos en el maestro, etiquetamos con 1.0 y eliminamos la rama de lanzamiento. Por lo tanto, una etiqueta para nosotros siempre debe considerarse santa y lo más estable posible. Entonces, en nuestro caso, siempre se crea la confirmación de fusión cuando fusionamos la rama de lanzamiento en el maestro.
Me desplazo un poco hacia adelante y hacia atrás sobre lo que pides al leer la pregunta.
Si realmente quisieras la raíz de una rama, creo que querías algo como
git rev-list --merges --boundary branch1 branch2 | tail -1
Si querías verificar que las sucursales estaban de hecho relacionadas.
git rev-list --left-right --merges --boundary branch1 branch2 |
grep ''^-'' |
tail -1 |
cut -c2-
Sin embargo, es muy probable que quieras
git merge-base branch1 branch2
Además, lo siguiente resultará útil la próxima vez que quieras bonitos diagramas de cola de milano:
git show-branch # [--mergebase] branch1 branch2
Puedes obtener un poco más de control usando git log:
git log --graph --left-right --merges --boundary HEAD MP26/MP26
> commit 0118d9979d1d27f08fa14cddfffa3e9c2cd5fe9c
|/ Merge: 8958c53 e1cd319
| | Author: Seth Heeren <seth.heeren@xxxx>
| | Date: Fri Feb 18 12:05:49 2011 +0100
| |
| | Merge branch ''MP26'' into tmp
| |
| o commit e1cd31926d01c08092a95226ac7b49bbea19ac92
| Author: Seth Heeren <seth.heeren@xxxx>
| Date: Thu Feb 17 16:39:17 2011 +0100
|
| xxxxx
|
o commit 8958c534b034cbb28bf1e853de0bfec0a9b0ddbb
Author: Seth Heeren <[email protected]>
Date: Fri Feb 18 12:05:30 2011 +0100
fixup
El registro de Git también admite la opción --decorate
en caso de que te guste la visualización del nombre de la rama desde git show-branch
Tal vez no entiendo la pregunta, pero las ramas están definidas por la confirmación en su punta, y cada antepasado de esa confirmación está contenido en la rama. Por ejemplo, supongamos que emergency-bug-fix
es una rama cuya sugerencia se encuentra en Emergency bug fix
en su diagrama: el compromiso más antiguo en esa rama será The past (master)
. La "revisión en la que se creó una rama" no es un concepto bien definido si solo observa el gráfico de confirmación.
Si solo te preocupa cuándo se creó una rama en un repositorio en particular, puedes usar el "reflog"; por ejemplo, mira la última línea en la salida de:
git reflog show emergency-bug-fix
Sin embargo, los resultados de ese comando serán diferentes de un repositorio a otro, dependiendo de cuándo se creó la referencia allí, por ejemplo, mediante la extracción o el envío. Además, de forma predeterminada, el reflog expira las entradas después de 90 días, es posible que ya no tenga esa información. Si tienes un repositorio central bendecido, puedes intentarlo de la misma manera, y eso podría darte el commit donde se creó esa referencia por primera vez en el repositorio centralizado. Sin embargo, no creo que esa sea la solución que quieres.
Una vez que haya trabajado correctamente, es una mejor idea simplemente etiquetar puntos en el gráfico de compromiso que le interesa. La respuesta de Magnus Skog le dice cómo hacerlo.