1.Git安装
- 在Linux上安装Git
先查看系统有没有安装git,如下表示没有安装
$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git安装
新版本的Debian或Ubuntu Linux 使用sudo apt-get install git
老版本的Debian或Ubuntu Linux 使用sudo apt-get install git-core
其他Linux版本,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:./config,make,sudo make install这几个命令安装就好了。 
- Moc OS 上安装Git
方案1: 安装homebrew,然后通过homebrew安装Git,具体参考homebrew文档
方案2(推荐): 安装Xcode即可,Xcode已经集成Git
- Windows上安装Git
直接从Git官网下载安装程序,然后按默认安装即可
- 安装完成后进行设置
进入git bash输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"注意: 注意git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址,不加--global参数即可。 
2.创建版本库
- 概述
版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
注意: 版本控制系统只能跟踪文本文件的改动,而图片丶视频丶word等二进制文件只能知道文件变动了,但是具体变动了什么内容,版本控制系统并不知道
- 创建空目录
$ mkdir repositoryName
- 初始化
通过git init命令把这个目录变成Git可以管理的仓库,创建完成后多了一个.git隐藏目录
$ git init
- 把文件添加到版本库
- 将文件放入版本库respositoryName目录下,如readme.txt
- 使用命令git add把文件添加到Git仓库,没有任何显示表示添加成功
$ git add readme.txt- 用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m "wrote a readme file"-m后面输入表示本次提交的说明
可以使用git add添加多次,最后再使用git commit提交
3.版本控制
- 常用查看命令
git status 查看仓库当前状态
git diff 查看difference
git log 查看版本提交日志
git reflog 查看你的每一次命令
- 版本回退
git reset --hard HEAD^ 回退到上一个版本,HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^表示上上一个版本,HEAD~100表示往上100个版本
git reset --hard <commit id> 回退到指定的提交版本,commit id可以通过git log或git reflog查看
注意: 版本号commit id 只需写前几位能定位到唯一版本即可
- 撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- fileName
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <fileName>,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退,不过前提是没有推送到远程库。
- 删除文件
场景1: 确实要删除版本库中的文件,使用git rm <fileName>,并且git commit
场景2: 如果删除错了,可以把误删的文件恢复到最新版本,使用git checkout --<fileName>
4.远程仓库
- 查看远程仓库
git remote            查看远程仓库信息(git中默认远程仓库名字为origin)
git remote -v        查看远程仓库详细信息
如下: fetch表示可以抓取的远程仓库,push表示可以推送的远程仓库
$ git remote -v
origin  [email protected]:michaelliao/learngit.git (fetch)
origin  [email protected]:michaelliao/learngit.git (push)
- 添加远程仓库(Github为例)
- 关联Github仓库
$ git remote add origin [email protected]:yourGithubName/repositoryName.git注意: yourGithubName是你的github账户名,repositoryName是你的github仓库名
    添加完成后Git中默认的远程仓库的名字就是origin 
- 把本地仓库的内容推送到远程仓库
$ git push -u origin master把当前分支master推送到远程,由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令为git push origin master
- 从远程仓库上克隆
$ git clone [email protected]:yourGithubName/repositoryName.git yourGithubName是你的github账户名,repositoryName是你的github仓库名
注意: Github给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。
使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https
5.分支管理
- 创建分支
git checkout -b hexo        创建hexo分支并切换到hexo分支
git branch hexo               创建hexo分支
git checkout hexo          切换到hexo分支
- 查看分支
git branch                    查看所有分支,当前分支前面会有一个*
- 合并分支
git merge hexo                把hexo分支合并到当前分支
git merge --no-ff -m "merge with no-ff" hexo    合并分支时禁用Fast forward模式注意: Git默认使用fast forward模式,此模式下删除分之后,会丢掉分支信息
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。 
- 删除分支
git branch -d hexo            删除hexo分支
git branch -D hexo            强制删除hexo分支(可不合并直接删除)
- 推送分支
git push origin master          将本地master分支推送到远程仓库origin上的master分支
- 抓取分支
git pull                    抓取远程仓库的新提交
- 存储工作现场
git stash                    把当前工作现场存储起来
git stash list                查看存储的工作现场如stash@{0}
git stash apply                将当前的工作现场恢复到存储的工作现场
git stash apply stash@{0}     恢复到指定的工作现场git stash drop                删除存储的工作现场
git stash pop                恢复到存储的工作现场并删除
- Bug分支使用
git stash                    把当前工作现场存储起来,可等以后恢复现场后继续工作
git checkout -b bug01        创建一个分支bug01当作bug修复分支,然后在该分支修复bug
git checkout master            切换到master分支
git merge --no-ff -m "merged bug fix 01" bug01        删除bug01分支6.标签管理
- 创建标签
git tag v1.0            创建一个新标签(在当前分支的最近的commit位置)名字为v1.0
git tag <name> <commit id>    在对应的commit位置创建一个标签
- 查看标签
git tag                查看所有标签
- 删除标签
git tag -d v1.0                        删除本地标签v1.0
git push origin :refs/tags/v1.0        删除远程仓库标签v1.0
- 推送标签到远程仓库
git push origin v1.0            推送标签v1.0到远程仓库
git push origin --tags            推送所有标签到远程仓库