前言
记录作者在日常工作中使用 Git 进行的一系列常规的操作;
查看远程服务器 git 版本
如何查看远程 git server 所使用的版本信息;通过 http(s)://<git address>/info/refs\?service=git-upload-pack 的方式查看
1 | > curl https://xxx:yyyy@bitbucket.org/ozms/hrx.git/info/refs\?service=git-upload-pack |
从 gent=git/2.7.4.1.g5468f9e 我们可以知道,bitbucket 远程 git 服务器使用的 git 版本是 2.7…
Tag 标签相关操作
Tag 相关的操作解释:https://git-scm.com/book/en/v2/Git-Basics-Tagging
基本操作
查看标签
查看本地标签
查看所有的标签
1
git tag
查看正则表达式指定标签
1
2
3
4
5
6
7
8
9
10
11$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3
v1.8.5.1
v1.8.5.2
v1.8.5.3
v1.8.5.4
v1.8.5.5查看某一个标签的详细信息
1
git show v0.1
查看远程标签
查看所有远程标签,
1 | > git ls-remote --tags |
创建标签
创建本地标签
创建带注释的标签 Annotated tag
1
git tag -a <tag name> -m "annotate"
创建轻量级的标签 Lightweight
1
git tag <tag name>
补充:轻量级标签和注解标签的异同
Lightweight tag vs Annotated Tag
Tag 原理上都是相同的,就是对某一次 commit 打上标签;Lightweight 是快速打上标签,不添加任何其它的信息,而 Annotated Tag 允许添加额外的包括添加者,注解等等信息;
将标签推送到远程
将特定标签推送到远程 Git 服务器
1
$ git push origin v0.1.1
相当于执行命令 git push origin refs/tags/<source tag name:>refs/tags/<target tag name>,所以上述命令等价于
1
$ git push origin refs/tags/v0.1.1:refs/tags/v0.1.1
推送所有标签到远程服务器
1
> git push --tags
删除标签
删除本地标签
1 | git tag -d <tag name> |
删除远程标签
在 Git V1.7.0 之前,推送一个空的标签到远程,既是删除
首先删除本地分支1
git tag -d <tag name>
然后推送一个空的分支到远程,
1
$ git push origin :refs/tags/<tag name>
在 Git V1.7.0 之后,可以显示的使用 –delete 命令
1
> git push origin --delete tag <tagname>
或者
1
> git push origin --delete tag <hashid>
切换至某一个标签
1 | $ git checkout tagName |
实践
下面是我实际操作过程中使用到的例子,使用 Annotated Tag 对我当前
1 | $ git tag -a v0.1.1 -m "basic with OAuth, Feign, Eureka, ZUUL, Resource Server" |
当我查看这个 annotated tag 的详情的时候,会返回非常详细的信息1
$ git show v0.1.1
显示如下信息,1
2
3
4
5
6
7
8
9
10
11
12tag v0.1
Tagger: shangyang <comedshang@163.com>
Date: Thu Jun 1 15:47:46 2017 +0800
basic with OAuth, Feign, Eureka, ZUUL, Resource Server
commit 06395869ea9a834673dfe6a104a5c0ccdea38445
Author: shangyang <comedshang@163.com>
Date: Tue May 30 21:13:28 2017 +0800
spring cloud with OAuth Server, Resource Server, ZUUL, Eureka and Feign,
first case with token authenticated.
将本地创建的 tag 推送到 Server,
1 | $ git push origin v0.1.1 |
至此,我们就可以在 Github 上查看到该 tag 了;
不过,细心的你会发现,其实这个推送过来的 Tag 也就是一个 Releases
版本了,但注意,其实这还是一个 Tag,如何真正的 Releases,参考下面一小节;
那,如果我们要删除这个远程标签呢?直接使用如下命令,参考删除远程标签1
$ git push origin :refs/tags/v0.1.0
创建 Github Releases
创建 Github Releases 有两种方式
- 本地提交
从上面的实践小节,我们看到了,如果通过创建本地的 tags 来实现 Github 的 releases, - Github 上创建
参考步骤,https://help.github.com/articles/creating-releases/
实际上,通过前面针对 Tag 的实践,当把本地的 tag 推送到 Git 服务器以后,在 Git 上回创建 Tag
同时也显示为 Release
;只是那不是 Github 上的 offical 的 Release
;
- 切换到 Tags 标签页面
- 选择某一个 Tag,点击 Edit release notes
- 输入 release 的注解,点击 release
- 这样,一个 Github Release 才算是真正的创建好了
Branch 相关操作
删除分支
删除本地分支
1
> git -d <branch name>
删除远程分支
Git V1.7.0 之前,推送一个空的分支到远程,既是删除
1
> git push origin :<branch name>
Git V1.7.0 之后,可以显示的使用命令 –delete
1
> git push origin --delete <branch name>
set upstream
有时候代码 pull 下来以后,但是并没有指定 branch 的 upstream,那么当在执行一些状态检查的时候,比如1
$ git cherry -v
上述命令用来查询本地与远程 git 之间的 commit 版本的变化,但是它默认是必须要设置 upstream 以后才能进行比对的,设置 upstream 有两种方式,1
$ git branch --set-upstream-to origin/my_branch
注意当你执行如下命令过后,
1
$ git push -u origin my_branch
初始化 orgin 的时候,默认相当于执行了 –set-upstream-to;
不过,Git 官网建议使用1
$ git branch -u origin/my_branch