5分钟,上手git
目录:
总结:只要习得上述操作,明白HEAD、工作区、版本库、暂存区、分支,git就过关了。
现在只要是入了猿的,还不知道SVN或者是git,那真是该学习5毛钱的了。
开发用的最多的版本控制系统,除了SVN就是git了(ClearCase就不说了,要么财大气粗,要么粗气大财)。使用过SVN的孩童都知道,哪天项目经理来给接手一个项目,给你个SVN地址,你导到本地,每个人都得先改完红色标记,和别人不一样的,再去提交自己更新的。对,这就是集中式版本管理系统。
(ps:这里不谈利弊,这东西是个玄学,除非马哪天对王说,我们比比钱吧。)
版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。再者SVN必须联网,不管是局域网还是互联网;必须要有中央服务器;
因为每个人电脑里都有完整的版本库,不联网也不要紧。分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
(终于把这些乱七八糟的介绍一删再删地说完了,其实我们只要知道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 //退出
![]()
1 提交之后,你可以打开readme.txt更改内容之后,add ,再commit 2 ctrl+c //可以停止当前命令 3 $ git status //仓库当前的状态 4 $ git diff readme.txt //详细查看修改了什么
就是你在电脑里能看到的目录,比如learngit文件夹就是一个工作区;
在工作区有个.git的文件夹,就是版本库;
暂存区就是你使用了add命令而没有提交的文件都会在暂存区;
两种方法: 一、 $ 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 //简化命令
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

浙公网安备 33010602011771号