目录
1、查看标签的详情,找出打标签的那次提交的commit id
git tag命令是对本地仓库分支添加标签,需要执行操作,把标签同步到远程服务器。
请在Git控制台上确认你的账号是否有权限推送Tag
一、创建 轻量级Tag(无注释)
切换至要打标签的分支
1、普通的打标签(标签默认打在本分支最新的commit上)
git tag <name>
2、将标签打在在过往的commit上
执行 git log 命令,找到历史的commit id
并执行下列命令
$ git tag {tag_name} {commitId}
二、创建重量级Tag(有注释)
1、创建
// -a指定标签名,-m指定说明文字:
git tag -a {tag_name} -m "{tag_desctiption}" {commitId}
2、查看
git show <tagname>
如:
$ git show v0.1
tag v0.1
Tagger: whd <whd@01zc.com>
Date: Thu Sep 14 14:22:25 2017 +0800
version 0.1 released push url
commit d5a65e9a08be3820d0b0a59b3df9750168557cd5 (tag: v0.1)
Author: whd <wanghaidong@01zhuanche.com>
Date: Tue Sep 12 20:48:28 2017 +0800
push url
三、查看标签
注意,标签不是按时间顺序列出,而是按字母排序的
1、标签列表
git tag
2、标签详情
git show <tagname>
四、把本地仓库分支tag推送到远程服务器
默认情况下,git push并不会把tag标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。
1、push单个tag
git push origin <tag_name>
2、push所有tag
git push --tags
或
git push origin --tags
当远程有多个服务的时候,远程服务名称是必须的,而如果远程只有一个远程服务则远程服务名称可以省略。
五、通过tag恢复代码
1、查看标签的详情,找出打标签的那次提交的commit id
(a)查看本地所有标签
$ git tag
tag_20170908
tag_20170914
v0.1
v0.9
v1.o
(b)查看某个标签的详细信息
$ git show v0.1
tag v0.1
Tagger: whd <wanghaidong@01zhuanche.com>
Date: Thu Sep 14 14:22:25 2017 +0800
version 0.1 released push url
commit d5a65e9a08be3820d0b0a59b3df9750168557cd5 (tag: v0.1)
Author: whd <wanghaidong@01zhuanche.com>
Date: Tue Sep 12 20:48:28 2017 +0800
push url
commit id很长,但只需要记住前面几位就可以了,这里我们只取前6位:d5a65e,Git会根据前面几位自动识别。
2、版本回退(分支回滚到某次提交)
(a)通过commit id进行回退(其实就是把head指针指向特定版本位置)到执指定本
git reset --hard <commitId>
(b)回退到上个版本(即最后一次提交的版本)
git reset --hard HEAD
特别注意:
版本回滚后,若立马修改并发版本,那么你就犯了严重的错误,因为修改后的代码是无法与正在开发的版本合并哒,也就是说刚刚修改并不能加入现有的代码。
通过标签回退版本后,要马上拉一个分支,然后当前主干分支要立即回到原来的位置,否则正在开发的代码可能白干了,接着在刚拉的分支上修改bug,修改完毕合并到主干上
(c)拉新分支
版本回滚完成后,需要先基于当前代码,拆出来一个新的分支;
然后将原来的分支立刻回滚到最新的位置。
bug的修复必须在新分支上进行,绝对不可以回滚后直接在原分支上进行修改。
六、取消回滚
其实就是再执行一次回退操作,只不过此时使用的commitId应为最新的那次提交的
1、查看 commit id
回退版本需要commit id,向前进同样
因为已经回滚的原因,此时执行 git log 命令,只能看到当前回滚的commit id,无法看到最新的,所以需要执行 git reflog
git reflog
git reflog 相比 git log 能查询更多的日志信息(包括commit和reset的操作,即使是已删除的),git reflog 能查询到所有的日志commit id 即使是删除的。
具体一个例子,假设有三个commit
commit3: add test3.c
commit2: add test2.c
commit1: add test1.c
这样提交了三个,也就是有三个commit id,commit3是最后提交的。
如果执行 git reset --hard HEAD 则 回滚到上一次提交的版本,既回退到 commit2 ,相当于删除了commit3。
若此时需要恢复commit3,则需要获取到 commit3 的 commitId,但因为回退原因git log是看不到commit3的commit id的,这个时候就要使用git reflog
2、回到回退前版本
git reset --hard aaff087
此时,取消回滚的操作已经完成了