Domanda

modifica La questione si riduce a "Può git rebase essere istruiti a rebase tag, anche tu?" Ma una risposta alla domanda iniziale contribuirebbe anche.


Come anteporre il passato in un repository git? ho seguito queste istruzioni . << strong> modifica > Poi ho aggiornato alla includere un file che è stato solo nelle istantanee, vedere qui . << strong> / Modifica > Poiché la storia è stata riscritta (da git filter-branch o git rebase o entrambi?) tutti i tag sono ancora sulla linea del tempo originale * e mi piacerebbe un po 'come a loro passare al nuovo. Credo di aver fatto tutto con tag univoci-messaggi di commit così ho potuto provare a scrivere uno script che li usa, ma un git move-tags <from> <to> più generale sarebbe meglio.

Quindi, c'è un modo per affrontare "il commit che è N commit dopo sulla nuova linea temporale in modo tale che l'ennesimo commit dopo sulla vecchia linea temporale è etichettato"? Qualsiasi altra soluzione se non il ri-etichettatura manuale ovvia sarebbe anche ottimo.

(non esitate a correggere tale terribilmente lunga frase in parole povere ...)

*) hey, git risolto il nonno-paradosso!

È stato utile?

Soluzione

Ho scritto uno script che fa questo.

$ git-rebase-tags master
Rebasing 107 tags onto 'master'
Can't rebase tag 'staging-deploy-01' because there are no identical commits on 'master'
Pointed tag 'v0.0.11' at commit 81e16f2ca1bc7802547bf19c1dba1a68212eafff
Pointed tag 'v0.0.12' at commit 17051cc28084dd56ae56e96767bceee46217c02d
Pointed tag 'v0.0.13' at commit 5d795076ba4b33f81d327dcf9bff727cef7771a2
[...]

gist.github.com/908381 .

Ma ancora meglio, utilizzare l'opzione --tag-name-filter integrato in git-filtro-ramo (1).

Altri suggerimenti

Non c'è costruito in modo di fare ciò che si desidera utilizzare git. 'Git rebase --tags' potrebbe essere interessante, ma non esiste.

Se il commit messaggi sono identici come dici allora si potrebbe passare attraverso ogni tag nei rif / tag, fanno:

'git log -1 --pretty=oneline <tagname>'

Confronto messaggio di commit per l'elenco completo:

'git log --pretty=oneline <newbranches>'

Se si trova una corrispondenza (e l'hash SHA1 è diverso) poi fare:

'git tag --force <tagname> <new SHA1>'

Secondo Thomas Rast a http: //git.661346 .n2.nabble.com / Rebase-con-tag-td5582971.html :

  

Leonid Podolny ha scritto:

     
    

E 'possibile, almeno, per ricevere una serie di (vecchio commit, nuovo commit)     coppie, in modo che io scrivere un piccolo script che farà questo per me?

  
     

Il gancio post-riscrittura ottiene questo elenco, in modo da poter utilizzare che se si vuole   a.

C'è un modo per fare git filter-branch aggiornare automaticamente i tag modificati utilizzando l'opzione --tag-name-filter, come descritto in questa risposta .

Ho messo insieme la mia implementazione di Python, git rebasetags

Nel caso in cui il rebase è interattiva, si sarà presentato con una shell bash in cui è possibile apportare le modifiche. All'uscita quel guscio, verranno ripristinati i tag.

entrare descrizione dell'immagine qui

questo post

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top