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 推送所有标签到远程仓库