¿Cambiar / agregar files a una label de git?

Me estoy familiarizando con git y ahora, git tags. En base a lo que he entendido hasta la date, las tags son solo una instantánea de un punto en el time de la historia que queremos rastrear. Por ejemplo, para los numbers de versión.

Tengo un cliente que quiere que agregue / respalde una corrección de errores a la versión 1.0 cuando ahora estamos en la versión 2.0. La idea es que cuando visualicemos un nuevo cuadro v1.0, se incluya la corrección de errores.

No estoy seguro de cómo haría esto.

Tengo las siguientes tags en el repository:

v2.0 v1.0 v0.1 

Intenté verificar la versión labelda ejecutando el command

 git checkout v1.0 

Luego hice mis cambios de corrección de errores. Y luego intenté:

 git add . git commit git push 

Cuando hago el push, recibo un post de error que indica que las actualizaciones fueron rechazadas porque una sugerencia de twig empujada está detrás de su contraparte remota.
Actualmente estoy buscando en Google este error, pero me gustaría saber si, fundamentalmente, estoy haciendo algo que no debería.

Anular una label / versión es una mala práctica en general. Como solo quieres corregir un error de una versión anterior, lo que funcionan es crear una nueva label con ese error corregido.

Es por eso que tenemos algo de CHANGELOG : ayuda a los humanos a ver las diferencias entre versiones / lanzamientos.

En el caso de corregir un error en una versión anterior ( v0.1.0 ), mientras que una nueva versión ( v0.2.0 ) tiene un logging de cambios y no se puede sincronizar con el anterior, es probable que desee crear una nueva label como v0.1.1 :

 # creating v0.1.0 git init echo "console.log('Hello Wrold')" > main.js git add . git commit -m 'Initial commit' git tag v0.1.0 git remote add origin ... git push --all git push --tags # creating v0.2.0 echo "console.log('Hello Mars')" > main.js git commit -m 'Hello Mars instead of Hello world' . git tag v0.2.0 git push --all git push --tags # fixing typo from v0.1.0 (edit/add files) and creating v0.1.1 git checkout v0.1.0 echo "console.log('Hello World')" > main.js git commit -m 'Fixed typo.' . git tag v0.1.1 git push --tags # go back to main branch git checkout master 

Fixed typo. commit no aparecerá en la twig master ya que se agregó solo en la label v0.1.1 .


Entonces, ¿qué v0.1.0 si quiero anular v0.1.0 ? Si eso es una mala práctica, no lo hace imposible. En lugar de crear una nueva versión ( git tag v0.1.1 ) podemos eliminar el antiguo v0.1.0 y crearlo de nuevo, forzando el empuje en el control remoto:

 ... # fixed typo git tag -d v0.1.0 git tag v0.1.0 git push --tags -f # go back to main branch git checkout master 

En GitHub, sus lanzamientos se enumerarán así:

Veamos las diferencias:

 $ git diff v0.1.0 v0.2.0 diff --git a/main.js b/main.js index 07e8cb2..7b366c5 100644 --- a/main.js +++ b/main.js @@ -1 +1 @@ -console.log('Hello Wrold') +console.log('Hello Mars') $ git diff v0.1.1 v0.2.0 diff --git a/main.js b/main.js index ba72797..7b366c5 100644 --- a/main.js +++ b/main.js @@ -1 +1 @@ -console.log('Hello World') +console.log('Hello Mars') $ git diff v0.1.0 v0.1.1 diff --git a/main.js b/main.js index 07e8cb2..ba72797 100644 --- a/main.js +++ b/main.js @@ -1 +1 @@ -console.log('Hello Wrold') +console.log('Hello World') 

Estás confundiendo tags con commits . Por lo general, las tags son análogas a los pointers to commits .

Para su escenario, un model típico sería el siguiente

 # Create a release branch for v1 git checkout -b v1_release v1.0 # make your bug fixes, `git commit`, etc. emacs foo git add foo git commit -m "critical bug fix" # tag your new release git tag v1.1 # push the branch and the tags to the server git push ... 

Para ver qué versiones tiene la solución, debe usar git branch --contains FIX_SHA o git tag --contains FIX_SHA

También puedes crear una twig v2_release y git merge la solución allí.

Nunca recomendaría reutilizar el mismo número de versión para dos imágenes de código diferentes que se flashearon en el hardware. Eso suena como una relación de cliente y una pesadilla de apoyo.