Я просто знакомлюсь с git, а теперь и с тегами git. Исходя из того, что я понял на сегодняшний день, теги - это всего лишь моментальный снимок момента в истории, который мы хотим отслеживать. Например, для номеров версий.
У меня есть клиент, который хочет, чтобы я добавил / перенесу исправление ошибки в версию 1.0, когда мы сейчас находимся на версии 2.0. Идея состоит в том, что когда мы создаем изображение нового бокса v1.0, исправление ошибки включается.
Не знаю, как бы я это сделал.
У меня в репо следующие теги:
v2.0
v1.0
v0.1
Я попытался проверить версию с тегами, выполнив команду
git checkout v1.0
Затем я внес исправления в исправления. А потом я попробовал:
git add .
git commit
git push
Когда я выполняю push, я получаю сообщение об ошибке, в котором говорится, что обновления были отклонены, потому что отправленная подсказка ветки находится за своим удаленным аналогом.
В настоящее время я ищу эту ошибку в Google, но я хотел бы знать, если по сути, я делаю что-то, чего не должен.
2 ответа
Переопределение тега / версии в целом - плохая практика. Поскольку вы хотите исправить ошибку только в более старой версии, способ git
заключается в создании нового тега с исправленной ошибкой.
Вот почему у нас есть функция CHANGELOG - она помогает людям видеть различия между версиями / выпусками.
В случае исправления ошибки в старой версии (v0.1.0
), в то время как новая версия (v0.2.0
) имеет журнал изменений и не может быть синхронизирована со старой, вы, вероятно, захотите создать новый тег как v0.1.1
:
# creating v0.1.0
git init
echo "console.log('Hello Wrold')" > main.js
git add .
git commit -m 'Initial commit'
git tag v0.1.0
git remote add origin ...
git push --all
git push --tags
# creating v0.2.0
echo "console.log('Hello Mars')" > main.js
git commit -m 'Hello Mars instead of Hello world' .
git tag v0.2.0
git push --all
git push --tags
# fixing typo from v0.1.0 (edit/add files) and creating v0.1.1
git checkout v0.1.0
echo "console.log('Hello World')" > main.js
git commit -m 'Fixed typo.' .
git tag v0.1.1
git push --tags
# go back to main branch
git checkout master
Фиксация Fixed typo.
не появится в ветке master
, так как она была добавлена только в тег v0.1.1
.
Итак, что, если я хочу переопределить v0.1.0
? Если это плохая практика, не значит, что это невозможно. Вместо создания новой версии (git tag v0.1.1
) мы можем удалить старую v0.1.0
и создать ее снова, принудительно нажав на удаленном компьютере:
... # fixed typo
git tag -d v0.1.0
git tag v0.1.0
git push --tags -f
# go back to main branch
git checkout master
На GitHub его выпуски будут перечислены следующим образом:
Посмотрим на различия:
$ git diff v0.1.0 v0.2.0
diff --git a/main.js b/main.js
index 07e8cb2..7b366c5 100644
--- a/main.js
+++ b/main.js
@@ -1 +1 @@
-console.log('Hello Wrold')
+console.log('Hello Mars')
$ git diff v0.1.1 v0.2.0
diff --git a/main.js b/main.js
index ba72797..7b366c5 100644
--- a/main.js
+++ b/main.js
@@ -1 +1 @@
-console.log('Hello World')
+console.log('Hello Mars')
$ git diff v0.1.0 v0.1.1
diff --git a/main.js b/main.js
index 07e8cb2..ba72797 100644
--- a/main.js
+++ b/main.js
@@ -1 +1 @@
-console.log('Hello Wrold')
+console.log('Hello World')
Вы путаете tags
с commits
. Обычно tags
аналогичны pointers to commits
.
Для вашего сценария типичная модель будет следующей
# Create a release branch for v1
git checkout -b v1_release v1.0
# make your bug fixes, `git commit`, etc.
emacs foo
git add foo
git commit -m "critical bug fix"
# tag your new release
git tag v1.1
# push the branch and the tags to the server
git push ...
Чтобы узнать, в каких версиях есть исправление, используйте git branch --contains FIX_SHA
или git tag --contains FIX_SHA
Вы также можете создать ветку v2_release и git merge
исправить там.
Я бы никогда не рекомендовал повторно использовать один и тот же номер версии для двух разных изображений кода, которые были записаны на оборудование. Это похоже на кошмар отношений с клиентами и службы поддержки.
Похожие вопросы
Новые вопросы
git
Git — это распределенная система контроля версий с открытым исходным кодом (DVCS). Используйте этот тег для вопросов об использовании Git и рабочих процессах. Не используйте этот тег для общих вопросов по программированию, связанных с репозиторием Git. Не используйте этот тег для вопросов GitHub/GitHub Actions, не связанных с использованием git; вместо этого используйте [github] или [github-actions]. Не используйте тег [github] для проблем, связанных с Git, только потому, что репозиторий размещен на GitHub.
x
принимает значения из0
в то, что вы хотите. Но различия между версиями отмечены вCHANGELOG
. Вот где вы говорите: Ошибкаx
была исправлена..