2013-04-25 6 views
1

Я только что научился возвращать ветку. Это прекрасно работает. Дело в том, что я отметил теги хозяина, и я планирую использовать команду git describe для создания развертываний на основе последнего тега. Откат фиксации создает новый коммит, поэтому команда git describe выводит тег с фиксации ammend, например, так:Возвращение ветки изменяет имя тега имени git Опишите

До:

git describe 
1-2-0 

После Возвратить «обратно» на это обязательство:

git describe 
1-2-0-1ga99ae04 

Есть ли способ преодолеть это? Или я должен получить последний тег по-разному?

+0

Какое поведение вы хотите? Кажется маловероятным, что вы хотели бы, чтобы Git сказал вам, что у вас есть тег 1-2-0 без каких-либо изменений, когда вы совершаете после этого, даже если некоторые из коммитов перекроют некоторые другие коммиты. Если вы хотите вернуться к тегу 1-2-0, просто «git checkout 1-2-0». –

+0

Да, я понимаю, что вы имеете в виду. Я не могу просто проверить чек 1-2-0, поскольку я хочу, чтобы фактически перевести ветвь в это состояние. Поведение, которое я хочу, чтобы оно полностью вернулось, имеет ведущую ветвь в состоянии 1-2-0. – Kriem

ответ

1

Просто, чтобы быть чистым. Вы действительно не вернетесь «назад». Скажем, у вас есть следующая история.

A<--B<--C<--D 
      | 
     (tag:1-2-0) 

Теперь скажите, что вы вернулись C. Вот что происходит.

A<--B<--C<--D<--E 
      | 
     (tag:1-2-0) 

Как вы можете видеть, вы продвинулись вперед в истории. Если этот тег уже был выпущен, вы, вероятно, захотите рассмотреть это «исправление», а тег снова - 1-2-0-1 или что-то в этом роде. Не знаете, какова ваша схема номеров версий, так что, очевидно, просто обрабатывайте исправления в вашем процессе.

Учитывая это изменение, это приведет к исправлению.

  (tag:1-2-0-1) 
       | 
A<--B<--C<--D<--E 
      | 
     (tag:1-2-0) 

Однако, если вы не выпустили или даже толкнул эту бирку на пульте дистанционного управления, и просто хочу, чтобы переместить метку, чтобы указать на E, то вы можете сделать это двумя способами. Легко запомнить способ удалить тег и воссоздать его.

git tag -d 1-2-0 
git tag 1-2-0 E 

Чем короче, быстрее, но бесконечно менее удобный способ изменить тег без удаления было бы использовать update-ref.

git update-ref refs/tags/1-2-0 E 

В нечетном случае вы подтолкнули бирку и хотите удалить его с пульта дистанционного управления, используйте следующий синтаксис.

git push <remote> :1-2-0 

Предполагая, что это ваш пульт дистанционного управления.

+0

Это очень хорошо объяснено. Спасибо! – Kriem

+0

Не могли бы вы также перенести свой тег и ваш HEAD обратно на C? – jtchitty

+0

@jtchitty - Вы, конечно, можете, но для этого вам нужно использовать один из описанных выше способов. Эти описанные методы должны работать одинаково в любое время, когда вам нужно изменить тег. Просто имейте в виду, что теги являются безголовыми, и поэтому у него нет HEAD, который следует за вами, когда вы добавляете фиксации, как это происходит в ветке. Вы должны вручную обновить тег, обновив его или используя update-ref. – eddiemoya