我只是熟悉git和git标签。根据迄今为止的理解,标签只是我们要跟踪的历史时间点的快照。例如,用于版本号。
我有一个客户,当我们现在使用2.0版时,希望我向1.0版添加/反向移植错误修复程序。想法是,当我们为新的v1.0框成像时,将包括错误修复程序。
我不确定该怎么做。
我在仓库中有以下标签:
v2.0
v1.0
v0.1
我尝试通过运行命令来检查标记的版本
git checkout v1.0
然后,我进行了错误修复更改。然后我尝试:
git add .
git commit
git push
当我执行推送时,我收到一条错误消息,指出更新被拒绝,因为推送的分支提示位于其远程对应项的后面。
我目前正在搜索该错误,但是我想知道从根本上来说,我在做我不应该做的事情。
覆盖标签/版本通常是一个不好的做法。由于您只想修复旧版本中的错误,因此它们的工作方式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')