全局配置
Git 分布式版本控制系统需要记录名字和 Email 地址,使用 --global
修改全局的配置,也可以仅针对某个仓库进行配置:
~ ➤ git config --global user.email "dw.jerry.c@gmail.com"
~ ➤ git config --global user.name "JerryBaby"
创建版本库
~ ➤ git init jerry
Initialized empty Git repository in /Users/jerry/git/jerry/.git/
jerry ➤ touch readme.md
jerry ➤ echo "test" > readme.md
jerry ➤ git add readme.md
jerry ➤ git commit -m "add readme.md"
[master (root-commit) 6c71199] add readme.md
1 file changed, 1 insertion(+)
create mode 100644 readme.md
查看提交日志
jerry ➤ echo "test2" >> readme.md
jerry ➤ git add .
jerry ➤ git commit -m "add test2"
[master 5380bc0] add test2
1 file changed, 1 insertion(+)
jerry ➤ git log
commit 5380bc0f617b744cf331d0a8d65f96492b7b4573
Author: JerryBaby <dw.jerry.c@gmail.com>
Date: Tue Jun 20 21:05:59 2017 +0800
add test2
commit 6c71199d2399cdb37591e216efa7777e08c450e6
Author: JerryBaby <dw.jerry.c@gmail.com>
Date: Tue Jun 20 21:04:06 2017 +0800
add readme.md
回退版本
在 Git 中,用 HEAD
表示当前版本,上一个版本就是 HEAD^
,上上个版本就是 HEAD^^
,以此类推
jerry ➤ git reset --hard HEAD^
HEAD is now at 6c71199 add readme.md
git reset
命令设置当前的 HEAD
到指定的状态。--hard
参数
如果还想恢复到最新的版本,只要制定版本号:
jerry ➤ git reset --hard 5380bc0f617b744cf331d0a8d65f96492b7b4573
HEAD is now at 5380bc0 add test2
工作区和暂存区
工作区(working directory)
工作区就是在电脑里能看到的目录
版本库(repository)
工作区隐藏目录 .git
是 Git 的版本库。版本库比较重要的就是称为 stage(或者叫 index)的暂存区,还有 Git 自动创建的第一个分支 master
,以及指向当前分支的一个指针 HEAD
git add
命令把修改内容添加到暂存区git commit
命令把暂存区的内容提交到当前分支
撤销修改
- 当修改了工作区某个文件的内容,想直接丢弃工作区的修改,执行
git checkout -- filename
- 当修改了工作区某个文件的内容,并且添加到了暂存区,想丢弃修改,执行
git reset HEAD filename; git checkout -- filename
- 当修改了工作区某个文件的内容,并且提交到了版本库,想丢弃修改,使用版本回退
删除文件
使用 rm
命令删除文件之后:
- 要从版本库中删除该文件,执行
git rm; git commit
- 删除错误,要恢复文件,执行
git checkout -- filename
添加远程仓库
关联一个远程仓库,使用命令 git remote add origin git@server-name:path/repo-name.git
关联后,使用命令 git push -u origin master
第一次推送 master 分支的所有内容
此后,每次本地提交后,只要有必要,就可以使用命令 git push origin master
推送最新修改
分支管理
创建并切换分支:
jerry ➤ git checkout -b dev
Switched to a new branch 'dev'
相当于
jerry ➤ git branch dev
jerry ➤ git checkout dev
Switched to a new branch 'dev'
jerry ➤ echo "branch dev" >> readme.md
jerry ➤ git add .
jerry ➤ git commit -m "add branch dev"
[dev 007f57b] add branch dev
1 file changed, 1 insertion(+)
jerry ➤ git checkout master
Switched to branch 'master'
jerry ➤ git branch
dev
* master
jerry ➤ git merge dev
Updating 5380bc0..007f57b
Fast-forward
readme.md | 1 +
1 file changed, 1 insertion(+)
git merge
命令用于合并指定分支到当前分支
jerry ➤ git branch -d dev
Deleted branch dev (was 007f57b).
jerry ➤ git branch
* master
暂存修改
当前版本有工作没有修改完成时,使用 git stash
保留工作现场,修改并 merge 新分支后,再用 git stash pop
恢复
标签管理
命令 git tag <name>
用于新建一个标签,默认为 HEAD
,也可以指定一个 commit id
git tag -a <tagname> -m "..."
可以指定标签信息
git tag -s <tagname> -m "..."
可以用 PGP 签名标签
命令 git tag
可以查看所有标签
命令 git pus origin <tagname>
可以推送一个本地标签
命令 git push origin --tags
可以推送全部未推送过的本地标签
命令 git tag -d <tagname>
可以删除一个本地标签
命令 git push origin :refs/tags/<tagname>
可以删除一个远程标签
参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/