标签:
1-0.创建版本库
1 $ mkdir learngit //创建一个空目录 2 $ git init //初始化一个Git仓库; 3 $ git add <file> //可反复使用; 4 $ git commit //完成提交;
2-0 时光机穿梭
1 $ git status //时刻掌握仓库当前的状态; 2 $ git diff <file> //查看版本之间的不同;
2-1 版本回退
1 $ git log //显示从最近到最远的提交日志; 2 $ git log --pretty=oenline 3 //将版本号和Msg显示在一行; 4 $ git reflog //查看命令历史; 5 $ git reset --hard HEAD^ 6 //当前文件回退到上一个版本; 7 $ git reset --hard 5134513<版本号> 8 //回退到指定版本; 9 10 //Git的版本回退速度很快,因为Git在内部有个指向当前版本的HEAD指针;当执行回退版本时,Git仅仅把HEAD指向设定的版本;
2-2 工作区/暂存区和版本库
1 工作区(Working Directory):电脑里能看到的目录; 2 版本库(Repository):工作区里的隐藏目录.git; 3 //Git的版本库存了很多东西,最重要的称为stage暂存区; 4 //Git为我们自动创建的第一个分支master,以及指向master的一个指针HEAD; 5 //git add命令实际上就是把提交的所有修改放到暂存区,然后执行git commit就可以一次性把暂存区的所有修改提交到版本库;
2-3 管理修改
1 Git追踪并管理的是修改,而非文件;每次修改,如果不add到暂存区,那就不会被commit到版本库中; 2 $ git diff HEAD -- <file> 3 //查看工作区和版本库里面最新的版本的区别;
2-4 撤销修改
1 $ git checkout -- <file> //工作区; 2 //可以撤销工作区的修改; 3 4 $ git reset HEAD <file> //暂存区; 5 //可以撤销add到暂存区的修改; 6 //git reset命令既可以回退版本,也可以把暂存区的修改退到工作区;当我们用HEAD时,表示最新的版本; 7 8 //commit到版本库的修改只能用版本回退的方法; //版本库
2-5 删除文件
1 //commit到版本库的文件,本地删除时,在版本库也要进行remove; 2 $ git rm <file> //删除文件; 3 $ git commit -m "rm file" 4 5 //工作区误删文件时 6 $ git checkou -- <file> //从版本库还原到工作区;
3-0 远程仓库
1 $ ssh-keygen -t rsa -C "email@example.com" 2 //创建公钥;
3-1 添加远程库
1 $ git remote add origin git@github.com:xxx/learngit.git 2 3 //将本地库推送到远程库 4 $ git push -u origin master
3-2 从远程库克隆
1 $ git clone git@github.com.xxx/gitskill.git 2 //Git支持多种协议,包括https和ssh,但通过ssh支持的原生git协议速度最快;
4-0 分支管理
1 Git分支无论创建/切换和删除,速度都很快;
4-1 创建和合并分支
1 //HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支; 2 //一开始,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点; 3 //当创建新的分支dev时,Git新建了一个指针dev,指向master相同的提交,再把HEAD指向dev,就表明当前分支在dev上; 4 //Git创建一个分支,除了增加一个dev指针,改变HEAD的指向,工作区没有任何变换; 5 //此时工作区的修改和提交都是针对dev分支了; 6 //当dev上的工作完成时,就可以把dev合并到master上;直接把master指针指向dev的当前提交,就完成合并; 7 8 $ git checkout -b dev //创建并切换分支; 9 10 $ git add readme.txt 11 $ git commit -m "branch test" //在dev分支上完成提交; 12 [dev fec145a] 13 14 $ git checkout master //切换到master分支; 15 $ git merge dev //指定dev分支合并到当前分支; 16 17 $ git branch -d dev //删除dev分支
4-2 解决冲突
1 $ git merge feature1 2 //CONFLICT (contetn):Merge conflict in readme.txt 3 //此时需手动解决发生冲突的文件;
4-3 分支管理策略
1 //Git合并分支时会用Fast-forward模式,但这种模式下,删除分之后,会丢掉分支信息; 2 $ git merge --no-ff -m "merge with no-ff" dev 3 //禁用Fast-forward;因为本次合并要创建一个新的commit,所以加上-m参数; 4 5 //master分支应该是非常稳定的,仅用来发布新版本; 6 //dev分支是开发版本,稳定下来之后就merge到master; 7 //guosk分支是自己单独开发的分支;完成任务向dev合并;
标签:
原文地址:http://www.cnblogs.com/yizihan/p/4237177.html