Git之源
Linus — 创造了Linux和Git
Git优点
Git在设计之初就是为了搞定linux内核这种巨无霸而设计的
- 快
- 本地仓库
- 轻量级分支
- 分布式
- 各种工作流
谁在使用
- Git
- Linux Kernel
- Eclipse
- Perl
- Android
- TypeScript
- webkit
Git和SVN的区别
Git | SVN |
---|---|
分布式 | 集中式 |
只关心文件数据的整体是否发生变化 | 只关心文件内容的具体差异 |
先commit到本地仓库 | 断开网络或者断开VPN就无法commit代码 |
基于key/value的方式存储文件 | 原始文件的储存方式(新版svn已改成元数据存储) |
add、commint、push | commint |
git仓库的工作流
git的文件状态
- git add 将修改添加到暂存区
- git checkout --file 取消对文件的修改
- git reset HEAD 取消已经暂存的文件
- git checkout HEAD --file 撤销对工作区的修改
- git reset HEAD 清空add命令向暂存区提交的关于file文件的修改
tag的概念及使用
-
tag是git版本库的一个标记,指向某个commit的指针。
-
tag主要用于发布版本的管理,一个版本发布之后,我们可以为git打上 v.1.0.1 v.1.0.2 …这样的标签。
-
tag感觉跟branch有点相似,但是本质上和分工上是不同的:
tag | branch |
---|---|
对应某次commit, 是一个点,是不可移动的 | 对应一系列commit,是很多点连成的一根线,有一个HEAD 指针,是可以依靠 HEAD 指针移动的。 |
不改动只查看 | 改动代码 |
指令 | 作用 |
---|---|
git tag tagname | 新建一个标签 |
git tag -a tagname -m “xxx” | 创建一个带备注的tag,备注信息由-m指定 |
git tag v0.1 [commit id] | 从指定位置新建标签 |
git tag | 可以查看所有标签。 |
git show tagname | 查看某一标签 |
git tag –d tagname | 删除某一标签 |
创建 tag 是基于本地分支的 commit,而且与分支的推送是两回事,就是说分支已经推送到远程了,但是你的 tag 并没有,如果把 tag 推送到远程分支上,需要另外执行 tag 的推送命令。