Могут ли теги автоматически перемещаться после git filter-branch и rebase? - PullRequest
14 голосов
/ 30 июня 2010

edit Вопрос сводится к "Может ли git rebase быть проинструктирован также перебазировать теги?"Но ответ на оригинальный вопрос также помог бы.


Задание Как добавить прошлое в репозиторий git? Я следовал этим инструкциям .<<strong> edit > Затем я перебазировал, чтобы включить файл, который был только на снимках, см. здесь . <<strong> / edit > Поскольку история была переписана (git filter-branch или git rebase или оба?) все теги все еще находятся на исходной временной шкале *, и я бы как-то хотел переместить их на новый.Я думаю, что я сделал все коммит-сообщения с тегами уникальными, чтобы попытаться написать скрипт, который их использует, но более общий git move-tags <from> <to> был бы лучше.

Итак, есть ли способ обратиться к «коммиту»что означает N коммитов после на новой временной шкале, так что N-й коммит после на старой временной шкале помечается "?Любое другое решение, кроме очевидной ручной повторной пометки, также было бы неплохо.

(пожалуйста, не стесняйтесь исправлять это ужасно длинное предложение на простом английском языке ...)

*) эй, мерзавец решил дед-парадокс!

Ответы [ 5 ]

9 голосов
/ 07 апреля 2011

Я написал скрипт, который делает это.

$ 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 .

Но даже лучше, используйте --tag-name-filter опция, встроенная в git-filter-branch (1).

3 голосов
/ 01 июля 2010

Нет встроенного способа делать то, что вы хотите, используя git.'git rebase --tags' может быть интересным, но его не существует.

Если сообщения о фиксации идентичны, как вы сказали, вы можете просмотреть каждый тег в refs / tags, выполните:

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

Сравните сообщение о фиксации с полным списком:

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

Если вы найдете совпадение (а хеш SHA1 отличается), выполните:

'git tag --force <tagname> <new SHA1>'
2 голосов
/ 16 августа 2017

Я собрал свою собственную реализацию Python, git rebasetags

В случае, если перебазирование будет интерактивным, вам будет представлена ​​оболочка bash, в которой вы сможете внести изменения.При выходе из этой оболочки теги будут восстановлены.

enter image description here

С этого поста

2 голосов
/ 11 июня 2015

Существует способ заставить git filter-branch автоматически обновлять измененные теги, используя опцию --tag-name-filter, как описано в этом ответе .

2 голосов
/ 12 марта 2012

По словам Томаса Раста на http://git.661346.n2.nabble.com/Rebase-with-tags-td5582971.html:

Леонид Подольный писал:

Возможно ли, по крайней мере, получить наборcommit) пар, так что я напишу небольшой сценарий, который сделает это для меня?

Хук после перезаписи получает этот список, так что вы можете использовать его, если хотите.

...