tipos tener tag remove qué proyecto podemos para oneline nuestros mayor log herramienta hacer hace existen etiquetas crear control git tags history rewrite

tener - ¿qué hace git log-oneline?



Git, reescribiendo el historial de la rama principal y las etiquetas asociadas (3)

Acabo de tener mi primera experiencia con la reescritura del historial de uno de mis repositorios (usando git-filter-branch). El problema es que el repositorio tenía varias etiquetas, que después de la reescritura parecen estar completamente desconectadas del historial resultante. Creo que esto se debe al hecho de que el historial asociado con las etiquetas no se ha reescrito, por lo que deben señalar las confirmaciones anteriores. Entonces, ¿qué puedo hacer para "aplicar" las etiquetas en el nuevo historial? Un poco de arte ASCII, tal vez es más fácil entender mi pregunta:

Repo original:

+ HEAD | | + TAG 0.2.0 | | + TAG 0.1.0 | | + Initial commit

Repo estructura reportada por gitk --all historia después de reescribir:

+ HEAD | | | | | | | | + Initial commit + HEAD | | + TAG 0.2.0 | | + TAG 0.1.0 | | + Initial commit


En primer lugar, también debe reescribir las etiquetas , por ejemplo, (como dijo VonC ) mediante el uso de la opción --all para reescribir todas las referencias.

Si tiene etiquetas anotadas ( etiquetas de peso pesado), también debe usar la opción --tag-name-filter , por ejemplo, como --tag-name-filter cat . Tenga en cuenta que no puede volver a escribir las etiquetas firmadas.


Parece el último paso de este procedimiento descrito aquí

$ git log --pretty=oneline origin/releases | sed -n -e ''/^/([0-9a-f]/{40/}/) Tag/( release/)/? /(.*/)/s--/3|/1|Tag release /3-p'' > ~/paludis-git-tags $ while read name msg head ; do git tag -m "${msg}" ${name} ${head} ; done < paludis-git-tags

La idea es leer las etiquetas de las versiones anteriores de los repositorios, para volver a aplicarlas en el nuevo historial.

Nota: en su uso original de git-filter-branch, ¿usó el:

-- --all

?

el -- que separa las opciones de la rama de filtro de las opciones de revisión, y el --all para reescribir todas las ramas y etiquetas.

Puede haber mantenido la etiqueta en su lugar en la nueva historia (aunque todavía no lo he probado)


Si desea realizar un cambio que se puede hacer con git filter-branch , puede usar --tag-name-filter como se explicó anteriormente.

Sin embargo, si desea hacer un reajuste interactivo, necesita algo más.

Ambas cosas se pueden lograr con git rebasetags

En caso de que la rebase sea interactiva, se te presentará un shell bash donde podrás hacer los cambios. Al salir de ese caparazón, las etiquetas serán restauradas.

De esta publicación