一、创建版本库
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
瞬即GIT建好了一空仓库。然后添加文件到仓库,1.使用git add,可多次使用,2.接着用git commit完成。
二、GIT工作区和暂存区理解
工作区:就是电脑建立仓库所在的目录。
版本库:工作区的隐藏目录.gif,GIT的版本库里存了很多东西。
暂存区:版本库目录下的为stage(或者index)文件。
GIT为自动创建第一个分支master,以及指向master的指针HEAD。
在创建版本库时,命令git add就是将工作区的修改提交至暂存区;命令git commit就是将暂存区的所有修改提交到分支中。
三、git 修改 管理/撤销/删除
git add 就是将工作区修改提交至暂存区。
git commit 就是暂存区提交至版本库分支。
可以用“git diff {HEAD(版本库中的一个指针分支)} -- readme.txt”命令可以查看工作区和版本库里面最新版本的区别。
git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
git reset HEAD readme.txt 把暂存区的修改撤销掉返回工作区。
git reset 可用于版本回退,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,
所以写成HEAD~100。
从旧版本回到新版本:git reset --hard “commit id”(版本id),用git reflog查找id.
四、冲突解决
五、分支管理
1、主分支
首先,代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布,默认叫做Maste
r。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。
2、开发分支
主分支只用来分布重大版本,日常开发应该在另一条分支上完成。我们把开发用的分支,叫做Develop。这个分支可以用来
生成代码的最新隔夜版本(nightly)。如果想正式对外发布,就在Master分支上,对Develop分支进行"合并"(merge)。
使用--no-ff参数则是会执行正常合并,
还可以创建临时分支、功能分支、预发布分支、修补bug分支。
六、标签管理
在Git中打标签非常简单,首先,切换到需要打标签的分支上:
$ git branch
* dev
master
$ git checkout master
Switched to branch 'master'
然后,敲命令git tag name就可以打一个新标签,默认标签是打在最新提交的commit上的,或者针对commit号标签tag。
$ git tag v1.0
$ git tag v0.9 6224937
可以用命令git tag查看所有标签;还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
$ git tag -a v0.1 -m "version 0.1 released" 3628164
如果标签打错了,也可以删除:
$ git tag -d v0.1
Deleted tag 'v0.1' (was e078af9)
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,使用命令git push origin tagname:
$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
* [new tag] v1.0 -> v1.0
或者,一次性推送全部尚未推送到远程的本地标签:
$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 554 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
* [new tag] v0.2 -> v0.2
* [new tag] v0.9 -> v0.9
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
$ git tag -d v0.9
Deleted tag 'v0.9' (was 6224937)
然后,从远程删除。删除命令也是push,但是格式如下:
$ git push origin :refs/tags/v0.9
To git@github.com:michaelliao/learngit.git
- [deleted] v0.9
-
命令git push origin tagname可以推送一个本地标签;
-
命令git push origin --tags可以推送全部未推送过的本地标签;
-
命令git tag -d tagname可以删除一个本地标签;
-
命令git push origin :refs/tags/tagname可以删除一个远程标签。