今天来记录一下自己学习git & github的心得和体会

先贴上廖雪峰前辈的git教程,堪称行业经典,我就是看了他的教程之后也想自己写点总结出来。

git原来是linux之父linus花了两周时间开发出来的,怪不得那么强大。虽然此时的我也还没有完全领略到git的风采,但是通过这几个月对github的深入了解之后,还是能领回到不少git的魅力!可以这么说,github打开我对前端世界认识的大门,而git则为我指引了一条快速通往这个世界的道路。

先声明下,所有git用法均是在mac环境下的terminal终端进行。好了,下面开始正式介绍:

1.纯小白式

比如我们现在想把github中bootstrap项目下载到本地,先访问https://github.com/twbs/bootstrap,然后再clone,如下图:

切换到你想存放的目录,在终端上执行:

1
$ git clone https://github.com/twbs/bootstrap.git

tips: 如果要git clone SSH URLs, 则需要配置SSH key passphrase.详细请看

然后就可以在该目录看到bootstrap项目了。不过这种方式是无法对原项目push任何修改。

2.小白式

比如现在需要新建一个apph5的前端项目,我们先去github,点击右上角的+然后New repository新建一个名叫apph5的库。
建立好了之后,会生成一个https链接: https://github.com/miaojihui/apph5.git 和一个ssh链接: git@github.com:MiaoJiHui/apph5.git。
现在clone到本地,或者新建一个apph5的本地文件夹,关键要把本地apph5文件夹和github远程库关联起来。
但在关联之前,我们必须先给github提供本机的ssh key,只有这样github才允许本地与github进行交互。
生成ssh key:

1
$ ssh-keygen -t rsa -C "youremail@example.com"

然后连敲三次enter键,ssh key就生成好啦,到~/.ssh/id_rsa.pub中查看key就行了,可以用vim打开。
接着到https://github.com/settings/keys,点击New SSH KEY,把key填进去就行了。此时可以在终端打 ssh -T git@github.com,如果显示如下提示就说明大功告成:

Hi MiaoJiHui! You’ve successfully authenticated, but GitHub does not provide shell access.

接着此时,如果本地项目写好了,则需要进行一系列git命令操作:
如果项目是新建的文件夹,则要进行git初始化

1
$ git init

就会在apph5目录生成一个.git的文件,通过该文件才可以进行git操作。
接着依次执行下面操作:

1
2
3
4
$ git add .          //把本地修改的所有文件添加到git暂存区,如果单个添加就写上包括路径的文件名
$ git commit -m "first commit" //把暂存取中的文件提交到本地的git库,并附加提交注释
$ git remote add origin  git@github.com:MiaoJiHui/apph5.git //添加远程github库的关联
$ git push -u origin master //把本地源码库push到github,-u代表第一次推送master分支的所有内容

ok,本地的文件都被push到github上了。

3.日常简单开发

以上都是针对一个人用一台电脑开发时的情况。现在来解决一个人用两台电脑同时开发的情形。

把远程库中最新的代码fetch/pull到本地

1
2
3
$ git fetch origin master		//获取最新分支
$ git log -p master..origin/master //比较本地的master分支和origin/master分支的差别
$ git merge origin/master //合并

or

1
2
3
$ git fetch origin master:tmp
$ git diff tmp 
$ git merge tmp
1
$ git pull origin master		//相当于git fetch 和 git merge, 强制更新

如上三种做法其实都是等效的,但是推荐前面两种。

好啦,结合git commit, git push, git fetch, git merge,这几个命令就可以基本满足日常简单开发需求了。

4.进阶(多人开发)

这里先引入一个很重要的文件, .gitignore
它是用于过滤平时不需要进行版本管理的文件,比如php运行时的一些缓存文件、config文件等。
eg:

1
2
/Application/Runtime/*
/Application/Home/Conf/*

下面摘自廖前辈的博客

回退版本
git reset --hard HEAD^
回退前前个版本
git reset --hard HEAD^^
回退前n个版本
git reset --hard HEAD~100

git log 可以查看提交历史,以便确定要回退到哪个版本
git reflog 查看命令历史,以便确定要回到未来的哪个版本

git diff HEAD -- readme.txt 命令可以查看工作区和版本库里面最新版本的区别
git checkout -- readme.txt 意思就是,把readme.txt文件在工作区的修改全部撤销
用命令git reset HEAD file 可以把暂存区的修改撤销掉(unstage),重新放回工作区

确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

branch分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name> //等于 git branch + git checkout
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>

To be continued…