5分钟,上手git

 目录:

  集中式版本管理系统

  分布式版本管理系统

  git安装

  git创建版本库

  git安全指令

  工作区、版本库、暂存区

  git常规的操作
    版本退回
    管理修改
    撤销修改
    删除文件

  远程仓库
    创建远程库
    远程库克隆

      分支
    创建和合并分支

  标签
    创建标签
    操作标签

  总结:只要习得上述操作,明白HEAD、工作区、版本库、暂存区、分支,git就过关了。


 

  现在只要是入了猿的,还不知道SVN或者是git,那真是该学习5毛钱的了。

  开发用的最多的版本控制系统,除了SVN就是git了(ClearCase就不说了,要么财大气粗,要么粗气大财)。使用过SVN的孩童都知道,哪天项目经理来给接手一个项目,给你个SVN地址,你导到本地,每个人都得先改完红色标记,和别人不一样的,再去提交自己更新的。对,这就是集中式版本管理系统。

 (ps:这里不谈利弊,这东西是个玄学,除非马哪天对王说,我们比比钱吧。

集中式版本管理系统

  版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。再者SVN必须联网,不管是局域网还是互联网;必须要有中央服务器;

分布式版本管理系统

  因为每个人电脑里都有完整的版本库,不联网也不要紧。分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

终于把这些乱七八糟的介绍一删再删地说完了,其实我们只要知道git是干嘛的怎么用的就好,其它什么原理呀,那都不是我们考虑的。所以我一致的观点,学了和会用完全是两码事

git安装:

  安装我就不说了,佛曰:"万事开头难";

git创建版本库:

  说白了就是创建一个文件夹,里面所有的文件都归git管,(你在哪创建的文件夹版本库就初始化在哪里)

  在文件夹里打开git bash或者用cd命令跳到当前文件夹,打开后应该是这样子的:

 

 

1 mkdir learngit  //在当前文件夹里创建一个叫learngit的版本库
2 cd learngit  //进到这个版本库
3 pwd    //显示当前目录
4 git init  //初始化版本库
5 在本地创建一个readme.txt的文件
6 $ git add readme.txt //告诉Git,把文件添加到仓库,add可以多次使用 7 $ git commit -m "提交readme" //把文件提交到仓库 -m后面是说明 8 ESC :wq //退出

 git安全指令:

1 提交之后,你可以打开readme.txt更改内容之后,add ,再commit
2 ctrl+c  //可以停止当前命令
3 $ git status  //仓库当前的状态
4 $ git diff readme.txt //详细查看修改了什么

工作区、版本库、暂存区:

  就是你在电脑里能看到的目录,比如learngit文件夹就是一个工作区;

  在工作区有个.git的文件夹,就是版本库;

  暂存区就是你使用了add命令而没有提交的文件都会在暂存区;

 git常规的操作:

  版本退回

两种方法:
一、
$ git log --pretty=oneline  //最近到最远的提交日志
$ git reset --hard HEAD^ //退回到上一次,^表示上一次,^^表示上两次,HEAD~100表示上100次
//还可以继续退回,但是看不到之前的退回之前的版本了。只有靠commit id 去选择具体的版本(输入commit id 的前几位数字就可以)
二、
$ git reflog  // 可以查看commit id
$ git reset --hard 3628164 // 数字是id号

  管理修改:

第一次修改readme文件 -> git add -> 第二次修改 -> git commit

当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

提交后,用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别

   撤销修改:

$ git checkout -- readme.txt
/*命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。
*/
git reset HEAD readme.txt 
/*
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本
*/

 (ps:如果你对每一步操作有疑问,别忘记我们的安全指令,git status;你就可以知道之前干了什么了)

  删除文件:

rm test.txt   //可以在本地新建一个test文件,然后用rm 把它删了

//如果你要删版本库的文件,记得删完之后
git commit  //删完提交,版本库里的文件被删了。

//如果你删错了,还可以还原
git checkout -- test.txt  //还原无论是工作区还是版本库

 

远程仓库:

  重头戏来了。身为猿儿,如果没有一个github账号,赶快去花5毛钱的时间去注册一个账号,https://github.com,进不去就科学进入,你懂的。

  怎么让本地仓库和远程仓库关联,建议去嗖嗖~,比我说得详细多了。

第一、
ssh-keygen -t rsa -C "邮箱" //创建SSH Key,在本地会有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥。

第二、
登陆GitHub,打开“Account settings”,“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容

   创建远程库,就不说了,那是github上的一步一步下一步地操作,在远程创建了个learngit的仓库后

git remote add origin git@github.com:xinshani/learngit.git //xinhani换成自己的账户名,否则,GG;远程库的名字就是origin

git push -u origin master //第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令

git push origin master //简化命令

   远程库克隆,支持很多协议https等;

git clone git@github.com:michaelliao/gitskills.git

 分支:

  分支呢,其实很好理解,从我们初始化git开始,其实就是在使用分支了。那是git默认的分支master,下图中git相当于一只,svn相当于另一只,两者是个平行宇宙,互不干扰,无论创建、切换和删除分支,Git在1秒钟之内就能完成!(有兴趣的还可以了解HEAD)

   创建和合并分支:

git branch dev //我们创建dev分支
git checkout dev //切换到dev分支

//或者合起来一起写
git checkout -b dev //-b参数表示创建并切换

git branch //查看当前分支,如果目前有有个分支,*号表示当前操作的分支

//演练,现在我们已经有两个分支了,切到dev上工作之后,add commit以后,dev的分支比master分支超前。
git checkout master //切回master
git merge dev  //把dev分支合并到master分支
git branch -d dev  //删除dev 分支
git branch  //只剩下master分支了。

 标签:

  发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

  唉,说白话文:小王同志,给我去把5万页的第3章第3节内容找出来。你懵逼不?。所以要做好标签。当再次要找东西的时候,小王,把v1.9标签找出来,duang就出来了。

  创建标签:

git checkout master //切换到要打标签的分支上
git tag v1.0 //打上标签 ok;
git tag  //查看所有标签    
$ git tag v0.9 <commit id> //对提交的打标签
git show v0.9 //查看标签信息,标签并不是按时间顺序打的

  操作标签:

git tag -d v0.1 //删除标签

//还可以把某个标签推送到远程
git push origin v1.0

//或者一次性把本地标签全推送到远程
git push origin --tags

//如果标签推送,想删,必须先删除本地标签
git tag -d v0.9
//再删远程
git push origin :refs/tags/v0.9

 

 

 

  

posted on 2017-02-24 08:13  辛山  阅读(208)  评论(0)    收藏  举报

导航