git学习11-标签管理

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照

Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。

Git有commit,为什么还要引入tag?

“请把上周一的那个版本打包发布,commit号是6a5819e...”

“一串乱七八糟的数字不好找!”

如果换一个办法:

“请把上周一的那个版本打包发布,版本号是v1.2”

“好的,按照tag v1.2查找commit就行!”

所以,tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起

创建标签

在Git中打标签非常简单,首先,切换到需要打标签的分支上:

2XXXX34 /e/pyc_study (dev)
□□ git branch
* dev
  master
2XXXX34 /e/pyc_study (dev)
□□ git status
On branch dev
nothing to commit, working tree clean
2XXXX34 /e/pyc_study (dev)
□□ git switch master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 7 commits.
  (use "git push" to publish your local commits)
2XXXX34 /e/pyc_study (master)
□□

push -> publish

廖老师切换分支使用:

$ git checkout master
Switched to branch 'master'

然后,敲命令git tag <name>就可以打一个新标签;可以用命令git tag查看所有标签:

2XXXX34 /e/pyc_study (master)
□□ git tag
2XXXX34 /e/pyc_study (master)
□□ git tag v1.0
2XXXX34 /e/pyc_study (master)
□□ git tag
v1.0
2XXXX34 /e/pyc_study (master)
□□ git status
On branch master
Your branch is ahead of 'origin/master' by 7 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
2XXXX34 /e/pyc_study (master)
□□ git log
commit 2973688991efa8decd0c82866a2c8526f9f03db3 (HEAD -> master, tag: v1.0)
Merge: 89272a1 487f295
Author: carysunqd <carys@aliyun.com>
Date:   Mon Apr 26 18:22:08 2021 +0800

    merged bug fix 101

commit 487f295956b25c53e8f5dd5c542a789e1672e275
Author: carysunqd <carys@aliyun.com>
Date:   Mon Apr 26 18:20:01 2021 +0800

    fix bug 101

...

2XXXX34 /e/pyc_study (master)
□□ git log --graph --pretty=oneline --abbrev-commit
*   2973688 (HEAD -> master, tag: v1.0) merged bug fix 101
|\
| * 487f295 fix bug 101
|/
* 89272a1 edit by feature2 for merge to master
*   04ab191 Merge branch 'dev'
|\
| * 3e87d02 edit by dev 2nd
* | 4b678dd merge with no-ff
|\|
| * 848bcf1 add merge
|/
* 4f06dec (origin/master, origin/HEAD) 0423 etc.
*   bdffc59 conflict fixed
|\
| * 53a3d1f AND simple
* | d71bde7 & simple
|/
* 915ed39 branch dev modified
* 2d69ef5 modify main.py from little black
* 40e5382 from carysLaptop little black
* 1aa2f87 README.md 已在 Bitbucket 中,在线编辑过。
* a2252ec modify readme.md
* 5cd5ad8 from haierLaptop PyCharm Ver01
* 2d5f4c7 Initial commit
2XXXX34 /e/pyc_study (master)
□□

默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?

方法是找到历史提交的commit id,然后打上就可以了:

2XXXX34 /e/pyc_study (master)
□□ git log --pretty=oneline --abbrev-commit
2973688 (HEAD -> master, tag: v1.0) merged bug fix 101
487f295 fix bug 101
89272a1 edit by feature2 for merge to master
04ab191 Merge branch 'dev'
3e87d02 edit by dev 2nd
4b678dd merge with no-ff
848bcf1 add merge
4f06dec (origin/master, origin/HEAD) 0423 etc.
bdffc59 conflict fixed
d71bde7 & simple
53a3d1f AND simple
915ed39 branch dev modified
2d69ef5 modify main.py from little black
40e5382 from carysLaptop little black
1aa2f87 README.md 已在 Bitbucket 中,在线编辑过。
a2252ec modify readme.md
5cd5ad8 from haierLaptop PyCharm Ver01
2d5f4c7 Initial commit
2XXXX34 /e/pyc_study (master)
□□

比方说要对add merge这次提交打标签,它对应的commit id是848bcf1,敲入命令:

2XXXX34 /e/pyc_study (master)
□□ git tag v0.9 848bcf1
2XXXX34 /e/pyc_study (master)
□□

再用命令git tag查看标签:

2XXXX34 /e/pyc_study (master)
□□ git tag
v0.9
v1.0
2XXXX34 /e/pyc_study (master)
□□

注意,标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看标签信息:

2XXXX34 /e/pyc_study (master)
□□ git show v0.9
commit 848bcf1093242511189ca5f5af5a5fe9451169b6 (tag: v0.9)
Author: carysunqd <carys@aliyun.com>
Date:   Sun Apr 25 13:50:36 2021 +0800

    add merge

diff --git a/README.md b/README.md
index 1ac073a..7e4f85a 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,9 @@ Creating a new branch is quick.
 Creating a new branch is quick and simple.


+## edit by branch dev
+this line is added by branch dev.
+

 ### What is this repository for? ###

2XXXX34 /e/pyc_study (master)
□□ git show 848bcf1
commit 848bcf1093242511189ca5f5af5a5fe9451169b6 (tag: v0.9)
Author: carysunqd <carys@aliyun.com>
Date:   Sun Apr 25 13:50:36 2021 +0800

    add merge

diff --git a/README.md b/README.md
index 1ac073a..7e4f85a 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,9 @@ Creating a new branch is quick.
 Creating a new branch is quick and simple.


+## edit by branch dev
+this line is added by branch dev.
+

 ### What is this repository for? ###

2XXXX34 /e/pyc_study (master)
□□

可以看到,v0.9确实打在add merge这次提交上。

还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:

2XXXX34 /e/pyc_study (master)
□□ git tag -a v0.1 -m "version 0.1 released" a2252ec
2XXXX34 /e/pyc_study (master)
□□ git log --pretty=oneline --abbrev-commit
2973688 (HEAD -> master, tag: v1.0) merged bug fix 101
487f295 fix bug 101
89272a1 edit by feature2 for merge to master
04ab191 Merge branch 'dev'
3e87d02 edit by dev 2nd
4b678dd merge with no-ff
848bcf1 (tag: v0.9) add merge
4f06dec (origin/master, origin/HEAD) 0423 etc.
bdffc59 conflict fixed
d71bde7 & simple
53a3d1f AND simple
915ed39 branch dev modified
2d69ef5 modify main.py from little black
40e5382 from carysLaptop little black
1aa2f87 README.md 已在 Bitbucket 中,在线编辑过。
a2252ec (tag: v0.1) modify readme.md
5cd5ad8 from haierLaptop PyCharm Ver01
2d5f4c7 Initial commit
2XXXX34 /e/pyc_study (master)
□□ 

用命令git show <tagname>可以看到说明文字:

2XXXX34 /e/pyc_study (master)
□□ git show v0.1
tag v0.1
Tagger: carysunqd <carys@aliyun.com>
Date:   Fri May 7 14:40:33 2021 +0800

version 0.1 released

commit a2252ecec2970f8c8ecd386814a25a3bfd3884ae (tag: v0.1)
Author: carysunqd <carys@aliyun.com>
Date:   Sat Apr 17 14:31:07 2021 +0800

    modify readme.md

diff --git a/README.md b/README.md
index 39af52c..4e27d82 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,9 @@
 # README #
+本文件由Bitbucket创建Repository时创建,首次由PyCharm进行编辑。
+通过PyCharm
+- 提交(Ctrl+K)
+- 推送(Ctrl+Shift+K)
+

 This README would normally document whatever steps are necessary to get your application up and running.

2XXXX34 /e/pyc_study (master)
□□

注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签

2XXXX34 /e/pyc_study (master)
□□ git switch dev
Switched to branch 'dev'
2XXXX34 /e/pyc_study (dev)
□□ git log --pretty=oneline --abbrev-commit
df0b5a7 (HEAD -> dev) fix bug by issue-101, merge dev
db25ad1 edit by dev
3e87d02 edit by dev 2nd
848bcf1 (tag: v0.9) add merge
4f06dec (origin/master, origin/HEAD) 0423 etc.
bdffc59 conflict fixed
d71bde7 & simple
53a3d1f AND simple
915ed39 branch dev modified
2d69ef5 modify main.py from little black
40e5382 from carysLaptop little black
1aa2f87 README.md 已在 Bitbucket 中,在线编辑过。
a2252ec (tag: v0.1) modify readme.md
5cd5ad8 from haierLaptop PyCharm Ver01
2d5f4c7 Initial commit
2XXXX34 /e/pyc_study (dev)
□□

小结

  • 命令git tag <tagname> [commit id]用于新建一个标签,默认为HEAD,也可以指定一个commit id;

  • 命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;

  • 命令git tag可以查看所有标签。

操作标签

如果标签打错了,也可以删除:

2XXXX34 /e/pyc_study (dev)
□□ git tag -d v0.1
Deleted tag 'v0.1' (was 50445f4)
2XXXX34 /e/pyc_study (dev)
□□ git tag
v0.9
v1.0
2XXXX34 /e/pyc_study (dev)
□□ git log --pretty=oneline --abbrev-commit
df0b5a7 (HEAD -> dev) fix bug by issue-101, merge dev
db25ad1 edit by dev
3e87d02 edit by dev 2nd
848bcf1 (tag: v0.9) add merge
4f06dec (origin/master, origin/HEAD) 0423 etc.
bdffc59 conflict fixed
d71bde7 & simple
53a3d1f AND simple
915ed39 branch dev modified
2d69ef5 modify main.py from little black
40e5382 from carysLaptop little black
1aa2f87 README.md 已在 Bitbucket 中,在线编辑过。
a2252ec modify readme.md
5cd5ad8 from haierLaptop PyCharm Ver01
2d5f4c7 Initial commit
2XXXX34 /e/pyc_study (dev)
□□

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

如果要推送某个标签到远程,使用命令git push origin <tagname>

$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To github.com:michaelliao/learngit.git
 * [new tag]         v1.0 -> v1.0

或者,一次性推送全部尚未推送到远程的本地标签:

$ git push origin --tags
Total 0 (delta 0), reused 0 (delta 0)
To github.com:michaelliao/learngit.git
 * [new tag]         v0.9 -> v0.9

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除

$ git tag -d v0.9
Deleted tag 'v0.9' (was f52c633)

然后,从远程删除。删除命令也是push,但是格式如下

$ git push origin :refs/tags/v0.9
To github.com:michaelliao/learngit.git
 - [deleted]         v0.9

要看看是否真的从远程库删除了标签,可以登录GitHub查看。

小结

  • 命令git push origin <tagname>可以推送一个本地标签;
  • 命令git push origin --tags可以推送全部未推送过的本地标签;
  • 命令git tag -d <tagname>可以删除一个本地标签;
  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
posted on 2021-05-07 15:08  carysun  阅读(67)  评论(0编辑  收藏  举报