Git 教程 在线

2327Git 标签

1、标签介绍

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

所以,标签也是版本库的一个快照。

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

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

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

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

如果换一个办法:

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

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

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

同大多数 VCS 一样,Git 也可以对某一时间点上的版本打上标签。人们在发布某个软件版本(比如 v1.0 等等)的时候,经常这么做。

本节我们一起来学习如何列出所有可用的标签,如何新建标签,以及各种不同类型标签之间的差别。


新建标签

Git 使用的标签有两种类型:轻量级的(lightweight)含附注的(annotated)

轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。

而含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证。

一般我们都建议使用含附注型的标签,以便保留相关信息;

当然,如果只是临时性加注标签,或者不需要旁注额外信息,用轻量级标签也没问题。

2 创建标签

[root@Git git]# git tag v1.0

3 查看已有标签

[root@Git git]# git tag
v1.0
[root@Git git]# git tag v1.1
[root@Git git]# git tag
v1.0
v1.1

4 删除标签

[root@Git git]# git tag -d v1.1
Deleted tag ‘v1.1’ (was 91388f0)
[root@Git git]# git tag
v1.0

5 查看此版本所修改的内容

[root@Git git]# git show v1.0
commit 91388f0883903ac9014e006611944f6688170ef4
Author: "syaving" <"819044347@qq.com">
Date: Fri Dec 16 02:32:05 2016 +0800
commit dir
diff –git a/readme b/readme
index 7a3d711..bfecb47 100644
— a/readme
+++ b/readme
@@ -1,2 +1,3 @@
text
hello git
+use commit
[root@Git git]# git log –oneline
91388f0 commit dir
e435fe8 add readme
2525062 add readme

2326Git 基本操作

图解 Git  

上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。

  • git add files 把当前文件放入暂存区域。
  • git commit 给暂存区域生成快照并提交。
  • git reset -- files 用来撤销最后一次git add files,你也可以用git reset 撤销所有暂存区域文件。
  • git checkout -- files 把文件从暂存区域复制到工作目录,用来丢弃本地修改。

更多图解参考:https://www.facesho.com/w3cnote/git-graphical.html

2325Git 基本操作

git 基本操作注意点总结:

git clone <source repository> <destination repository>

复制本地仓库的命令方式。

<source repository>:想克隆的本地仓库路径

<destination repository>:想克隆去另一个地方的路径。例如 git clone d:/git e:/git11 是将 d:/git 的仓库(即包含隐藏文件 .git 的目录)克隆到 e:/git11 目录下。

注意:

1、<destination repository> 目录必须没有在文件系统上创建,或创建了但里面为空,不然会克隆不成功。

2、与从远程拉取仓库不同,路径的最后不用写 .git 来表明这是一个仓库。

git status –s

获得简短的状态输出。

git diff
  • git diff:查看工作区与暂存区的不同。
  • git diff –cached [<commit>]:查看暂存区与指定提交版本的不同,版本可缺省(为HEAD)。
  • git diff <commit>:查看工作区与指定提交版本的不同。
  • git diff <commit>..<commit>:查看2个指定提交版本的不同,其中任一可缺省(为HEAD)。
  • git diff <commit>...<commit>:查看2个不同分支指定提交版本的不同,其中任一可缺省(为HEAD),该命令相当于git diff $(git-merge-base A B) B。
git commit –am ""

直接提交全部修改,相当于 add 和 commit 一起执行了。

注意:全部文件为 tracked 才行,你新建了文件为 untracked 时,该命令不会执行。

git checkout

与 git reset 不同,reset 是替换整个目录树,多余的文件将被删除。而 checkout 只是替换指定的文件,对多余的文件保留不做任何处理。

git rm

把文件从工作区和暂存区中删除。使用 —cached 只从暂存区中删除。使用 –rf <directory> 可删除指定目录下的所有文件和子目录。

git mv <source> <destination>

在工作区和暂存区中进行移动或重命名。若 <destination> 不为一个目录名,则执行重命名。如果为一个目录名,则执行移动。

2324Git 基本操作

git commit、git push、git pull、 git fetch、git merge 的含义与区别

  • git commit:是将本地修改过的文件提交到本地库中;
  • git push:是将本地库中的最新信息发送给远程库;
  • git pull:是从远程获取最新版本到本地,并自动merge;
  • git fetch:是从远程获取最新版本到本地,不会自动merge;
  • git merge:是用于从指定的commit(s)合并到当前分支,用来合并两个分支;
$ git merge -b  // 指将 b 分支合并到当前分支

git pull 相当于 git fetch + git merge

2323Git 创建仓库

git clone 时,可以所用不同的协议,包括 ssh, git, https 等,其中最常用的是 ssh,因为速度较快,还可以配置公钥免输入密码。各种写法如下:

git clone git@github.com:fsliurujie/test.git         --SSH协议
git clone git://github.com/fsliurujie/test.git          --GIT协议
git clone https://github.com/fsliurujie/test.git      --HTTPS协议