Как я могу зафиксировать старый тег git? - PullRequest
14 голосов
/ 11 ноября 2010

Итак, два месяца назад я перенес нашу базу кода в SVN в Git с полной историей изменений. Сразу после этого мы пометили новый релиз и продолжили работу. Поэтому, пока мы продолжали работать над новым тегом, некоторые люди продолжали исправлять ошибки в старом теге в SVN, и теперь я хотел бы перенести все эти изменения в этот тег в Git.

Я могу клонировать тэг и сделать, чтобы Git позволял мне делать коммиты в него, но я не могу что-то сделать с помощью git-push. Проверяя git-log, коммит есть, но git-st говорит мне, что я сейчас не нахожусь ни в одной ветке.

Итак, Интернет, как я могу зафиксировать старый тег git?

Ответы [ 7 ]

62 голосов
/ 15 июля 2014

Если кто-то приходит сюда после поиска «заменить тег git» или что-то подобное, я рекомендую следующий подход:

git tag -d <tagname>
git checkout <new commit or branch>
git tag -a <tagname>
git push <remotename> <tagname> -f

, например:

git checkout 2.0
git tag -d v2.0
git tag -a v2.0 -m"Version 2.0"
git push origin v2.0 -f

Надеюсь, это поможеткто-то.

11 голосов
/ 11 ноября 2010

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

Звучит так, как будто вы намеревались создать ветку.Вы должны создать новую ветку (git branch branchname && git checkout branchname), чтобы не потерять свои коммиты.Затем перенесите эту ветку в репозиторий и попросите разработчиков релиза / исправления ошибок работать в этой ветке для релиза.

8 голосов
/ 17 февраля 2017

Если пользователь использует ту же ветку, из которой он создал старый тег, то сначала создайте новый список изменений.в противном случае извлеките тег, а затем создайте новый список изменений.затем используйте следующие шаги, чтобы обновить существующий тег с новым номером списка изменений

git tag -f <old tag name>

git push -f --tags

Всего 0 (дельта 0), повторно 0 (дельта 0) +... <old tag name> -> <old tag name> (принудительное обновление)

8 голосов
/ 11 ноября 2010

Вы имеете в виду ветвь, а не тег.Теги в Git - это закладки на определенный момент времени в вашей основной ветке.Хотя вы МОЖЕТЕ перезаписать тег (git tag -f), это не рекомендуется.Я ТОЛЬКО перезапишу тег, если он еще не развернут.

2 голосов
/ 11 ноября 2010

Здесь происходит множество вещей.

  1. Похоже, у вас недостаточно понимания цели git tag .Я бы рекомендовал прочитать справочную страницу , а также соответствующий раздел из Pro Git . Pro Git также представляет отличное введение в инструмент, а также Git Magic .

  2. Как указали другие, вылибо вы уже создали ветку и делаете коммит, и просто ошибочно определили его здесь как тег, либо вы фактически создали тег и делаете новые коммиты вне ветки, и это довольно запутанно.Вы определенно хотите прочитать о git branch , чтобы получить представление о том, как использовать это, если вы еще не знаете.

  3. Звучит так, как будто вы и вашКоманда могла бы использовать рабочий поток, который поддерживает несколько потоков выпуска, обслуживания и разработки, и для этого я бы скромно предложил это самое превосходное руководство от Винсента Дриссена .Я познакомил это с моей командой у моего последнего работодателя, и это изменило нашу работу.Чтение, которое должно дать вам невероятно хорошее понимание того, как git может наилучшим образом поддерживать то, как, по вашему мнению, ваша команда уже пытается работать.

  4. Невозможно передать старыйпометить напрямую.Как отмечают другие, тег - это не что иное, как имя для конкретного коммита.Однако у меня есть несколько соображений, которые могут быть вам полезны.

    1. Вы всегда можете проверить ветку на основе тега через git checkout -b my-new-branch name-of-tag.Это даст вам совершенно новую ветку, основанную на этом теге, который вы затем сможете зафиксировать.Поделиться этой веткой так же просто, как вытолкнуть ее в общедоступную точку соприкосновения и позволить другим потянуть ее вниз.

    2. Если вам нужен движущийся тег, вы делаете что-то «безумное» (по крайней мере, в умах авторов справочной страницы git s. Они отчасти правы в том, что движущиеся теги на самом деле являются просто головками ветвей и, таким образом, могут быть просто ветвью. Теги не должны быть частьюЕсли вы действительно хотите движущуюся метку, вы можете сделать это, перепрыгнув через несколько огненных обручей и перепрыгнув через яму кинжала, следуя инструкциям, приведенным в разделе Повторная пометка справочная страница git tag.

1 голос
/ 11 ноября 2010

Вы должны создать новую ветку в позиции тега, удалить тег, сделать свои коммиты, заново создать тег и нажать.

1 голос
/ 11 ноября 2010

Если я правильно понимаю вашу проблему, вам нужно создать ветку, где находятся ваши коммиты.Для этого проверьте версию, которую вы хотите нажать.В вашем git bash введите:

git branch old-version

Это должно создать ветку в месте вашего коммита с именем old-version.Затем попробуйте нажать.

...