git教程
初始设置
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
--global :表示你这台机器上所有的Git仓库都会使用这个配置
创建版本库
$ mkdir learngit
$ cd learngit
$ pwd //查看当前路径
/c/Users/youngerZeng/Desktop/learngit
$ git init //初始化,变成可以管理的仓库,会生成 .git 目录
$ ls -ah //查看该目录下的文件
$ git add readme.txt //readme.txt 添加到仓库
$ git commit -m "wrote a readme file" //提交
查看状态
$ git status //查看当前状态
$ git diff readme.txt //查看修改内容
$ cat readme.txt //查看文本内容
版本回退
$ git log //查看历史
$ git reset --hard HEAD^^ //回退到上上个版本
$ git reset --hard 1094a //hard指向 '1094a'版本,跳转到该版本
$ git reflog //查看命令历史
工作区和暂存区
撤销修改
$ git checkout -- readme.txt //撤销修改
命令
git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:一种是
readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;一种是
readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。总之,就是让这个文件回到最近一次
git commit
或git add
时的状态。
$ git reset HEAD readme.txt //可以把暂存区的修改撤销掉(unstage),重新放回工作区
删除文件
从版本库中删除该文件,再用命令
git rm
删掉,并且git commit
$ git rm test.txt //删除文件
远程仓库
$ ssh-keygen -t rsa -C "youremail@example.com" //创建SSH Key
在用户主目录里找到
.ssh
目录,有id_rsa
和id_rsa.pub
两个秘钥文件,,id_rsa
私钥,,id_rsa.pub
公钥github 里添加公钥,远程同步
//关联远程仓库
$ git remote add origin git@github.com:younger/learngit.git
//推送到远程库
$ git push [-u] origin master
//从远程库克隆到本地库
$ git clone git@github.com:younger/gitskills.git
$ git remote //查看远程库的信息
$ git remote -v //显示更详细的信息
//如果远程仓库已修改,本地仓库也修改了,那么先把远程仓库抓取到本地合并,解决冲突,再推送
//如果没有创建链接,则指定本地dev分支与远程origin/dev分支的链接
$ git branch --set-upstream-to=origin/dev dev
$ git pull //抓取
git push origin dev //推送
创建与合并分支
$ git branch dev //创建分支
$ git checkout dev //切换分支
$ git checkout -b dev //创建并切换分支
$ git branch //查看当前分支
$ git checkout master //切换回master分支
$ git merge dev //dev合并到当前master分支
$ git branch -d dev //删除dev分支
解决冲突
master分支和feature1分支都分别提交修改内容,合并冲突
可手动解决冲突后再提交
//查看分支合并图
$ git log --graph --pretty=oneline --abbrev-commit
//用大写的 D 强行删除一个没有被合并过的分支
$ git branch -D dev
分支管理
//--no-ff参数:用普通模式合并,合并后的历史有分支
//而fast forward合并就看不出来曾经做过合并。
$ git merge --no-ff -m "merge with no-ff" dev
Bug分支
$ git stash //把当前工作现场“储藏”起来,等以后恢复现场后继续工作
$ git stash list//查看存储在stash的工作列表
$ git stash apply//恢复
$ git stash drop //删除
$ git stash pop //恢复并删除
$ $ git stash apply stash@{0} //恢复指定的stash
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场
git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场。
其他
rebase:
$ git rebase //把本地未push的分叉提交历史整理成直线
标签:
$ git tag v1.0 //打一个新标签
$ git tag v0.9 f52c633
$ git tag //查看标签
$ git show v0.9 //查看标签信息
$ git tag -a v0.1 -m "version 0.1 released" 1094adb//创建带有说明标签
$ git tag -d v0.1 //删除标签
$ git push origin v1.0 //推送某个标签到远程
//远程删除标签,但是要先删除本地标签
$ git push origin :refs/tags/v0.9
自定义Git:
$ git config --global color.ui true //让Git显示颜色