Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。
git安装
windows安装
下载msysgit/git,安装’Git Bash here’和’Git GUI here’,使用Git Bash即可
linux安装
sudo apt-get install git (ubuntu)
yum install git (centOS)
安装完成的时候进入git命令行配置自己名称和邮箱:
git config --global user.name "xiaoyu"
git config --global user.email "zxy9312@gmail.com"
本地仓库操作
创建一个版本库
mkdir learngit
cd learngit
pwd
初始化一个Git仓库,使用git init命令:
git init
创建一个readme.txt文件,使用命令添加一个文件到git仓库
git add
是将工作区的内容添加到缓存区
git commit
是将缓存区的内容提交上去
git diff
是查看工作区和缓存区的内容的区别
git add readme.txt
git add file1.txt file2.txt
git add *
git commit -m "wrote a readme file!"
查看工作区状态
git status
查看修改的内容(比较缓存区和工作区之间的区别)
git diff
查看最近到最远提交的日志文件
git log
git log --pretty=oneline //这儿看到的是commit id
记录你的每一次命令,查看head
git reflog //查询每次提交的commit信息,从而重回未来
回滚到上一个版本
git reset --hard HEAD^ //向上回滚一个版本
git reset --hard HEAD^^ //向上回滚两个版本
git reset --hard HEAD~100 //向上回滚100个版本
查看readme.txt 文件
cat readme.txt
工作区修改全部撤销
可以在你还没有将文件添加缓存区之前,即没有git add之前
git checkout -- readme.txt // --很重要,没有表示切换到另一个分支
两种情况可以被修改:
- 自然修改还没有放置到缓存区,现在撤销回到版本库一模一样的状态
- 已经添加到缓存区,做了修改,现在回到添加到缓存区后的状态
把缓存区的修改回退到工作区
使用了git add,但没有git commit
git reset HEAD readme.txt //撤销缓存区修改
git checkout -- readme.txt //撤销工作区修改
如果使用git commit的话,就是用版本回滚,前提是你没有提交的远程库,
不然的话这条记录无法销毁
删除一个文件
git rm test.log
git commit -m "delete test.log"
#远程库操作
设置远程秘钥
- 查看是否已经有了ssh密钥:
cd ~/.ssh
设置远程仓库:ssh-keygen -t rsa -C "zxy9312@gmail.com"
一路回车,生成id_rsa和id_rsa.pub两个文件 - 登陆GitHub,打开’setting’ -> ‘SSH Keys’,粘贴id_rsa.pub的内容
推送到github上
git remote add origin git@github.com:RoinZhang/learngit.git
git push -u origin master 第一次推送到master分支的所有内容
git push origin master 推送最新的修改
远程分支比本地更新,需要首先git pull
git pull origin master
从git上面克隆
git clone git@github.com:RoinZhang/learngit.git
查看远程库信息
git remote
git remote -v
分支管理
git checkout -b dev //创建并切换到dev分支
git branch //查看所有分支
git branch dev //创建dev分支
git checkout dev //切换到dev分支
git merge dev //使用[fast forword]合并dev分支到当前分支上
git branch -d dev //删除dev分支
普通分支合并
git merge --no--ff -m "merge with no-ff" dev
// 使用普通模式合并dev到当前分支上,并提交一个新版本
// --no--ff 表示普通模式合并
// -m "merge with no-ff" 表示commit一个新版本
【注意】:
合并分支时,加上--no-ff参数就可以用普通模式合并,
合并后的历史有分支,能看出来曾经做过合并,
而fast forward合并就看不出来曾经做过合并。
查看分支合并图
git log --graph --pretty=oneline --abbrev-commit
BUG分支
git stash //在当前分支上把当前工作现场'储藏起来',等以后恢复现场
git stash list //查看储藏的工作现场
git stash apply //恢复stash内容并不删除工作现场
git stash drop //删除statsh内容
git stash pop //恢复工作现场并删除stash内容
git stash stash@{0} //恢复指定的stash
Feature分支
git branch -D dev //强行删除没有被合并过的dev分支
标签管理
git tag <name> #用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "blablabla..." #可以指定标签信息;
git tag -s <tagname> -m "blablabla..." #可以用PGP签名标签;
git tag #可以查看所有标签
git push origin <tagname> #可以推送一个本地标签;
git push origin --tags #可以推送全部未推送过的本地标签
git tag -d <tagname> #可以删除一个本地标签;
git push origin :refs/tags/<tagname> #可以删除一个远程标签。