Git学习小结分享
使用git一段时间,仅仅是简单使用git pull、push、add、commit等命令。对git也是一直半解。近期才静下心来好好从头看了一遍,又有很多收获。
Git是什么?
Git是眼下世界上最先进的分布式版本号控制系统(没有之中的一个)。
Git安装
在Mac os上安装
下载:http://code.google.com/p/git-osx-installer/
下载最新的pkg文件
在windows上安装
最早git是在linux环境下开发,所以在windows下使用git,须要Cygwin这样的环境,并且Cygwin的安装环境都比較复杂。只是好在有大神把git和Cygwin都打包好了–msysgit ,仅仅须要下载一个单独的exe安装就可以。
能够从http://msysgit.github.io 下载,或者百度搜索下载。
安装完毕后再開始菜单里找到”Git”->”Git Bash”,点击执行就会出来一个相似命令窗体的东西。
Git配置
git config – 初始化你的配置
安装完毕后,git须要例如以下设置:
git config --global user.name "your name" 配置你的名字,也就是每次提交别人都能够依据名字知道是谁提交的
git config --global user.email "xxx@xxx.com"
–global參数 表示你电脑上全部git仓库以后都会使用这个配置。
假设你电脑上有两个git仓库,一个公司的,一个是个人的。肯定不希望使用同一个配置。你能够cd到你个人仓库底下重置该配置,去掉–global參数就可以。即当前配置仅仅针对当前仓库有效。
创建版本号库
接下来就该创建版本号库,即本地的project文件夹
git init – 初始化一个本地仓库
你能够手动创建一个文件夹,然后cd到该文件夹下。执行git init
git init
执行完以后你会发现当前文件夹下会多出一个.git文件夹,该文件夹是用来跟踪你全部的文件操作
然后你就能够在本地进行一些文件的操作
git add – 把文件加入到仓库
新建一个文件cx.txt
git add cx.txt (加入cx.txt文件到仓库)
git add . (批量加入,加入全部文件到仓库。一般很多其它的採用该命令)
git commit – 把文件提交的仓库
git commit -m "本次提交说明" (-m 加入提交说明)
or
git commit -a -m "提交说明" (-a 取代git add,使用-a參数后就不用使用git add命令)
git status – 查看你做了哪些修改
git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: cx.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
git diff – 查看文件修改前和修改后的对照
git diff cx.txt
git log – 查看全部的提交日志
比方你自己早上提交了一个a.txt,下午修改了b.txt中的一行代码等,通过git log能够查到全部认的修改信息
git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 15:11:49 2013 +0800
add a.txt
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 14:53:12 2013 +0800
modify b.txt
commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date: Mon Aug 19 17:51:55 2013 +0800
modify c.txt
假设感觉输出的信息太多,你也能够在git log后加入參数 –pretty=online
git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 add a.txt
ea34578d5496d7dd233c827ed32a8cd576c5ee85 modify b.txt
cb926e7ea50ad11b8f9e909c05226233bf755030 modify c.txt
说明:
看到的一大串3624...e1e0
等相似的字符串commit id
,即每次提交自己主动生成的唯一标识。你能够使用git show 命令查看更具体的提交信息。
git show
git show ea34578d5496d7dd233c827ed32a8cd576c5ee85
通过该命令,你就能够看到提交人对b.txt做了哪些修改
git reset – 版本号回退
还是以上面为例,比方你提交了a.txt以后。突然感觉a.txt文件不该被提交。想要回到上一次提交的状态
git reset --hard HEAD^ 回退到上一个版本号
git reset --hard HEAD^^ 回退到上两个版本号
git reset --hard HEAD~100 会退到上100个版本号
再比方你回退到上一个版本号,即修改b.txt的那个版本号,突然又感觉a.txt还是应该被提交(I 服了 you)
git reset --hard 3628164fb26d48395383f8f31179f24e0882e1e0
仅仅须要找到那次提交的commit id就可以。能够看到又回来了,假设commit id找不到肿么办。
例如以下:
git feflog – 用来记录你的每一次命令
git reflog
ea34578 HEAD@{0}: xxxx
3628164 HEAD@{1}: commit: add a.txt
ea34578 HEAD@{2}: commit: modify b.txt
cb926e7 HEAD@{3}: commit (initial): modify c.txt
git checkout – 放弃文件修改
比方你在a.txt里面加入了非常多行代码,并且还没有执行git add命令。则使用git checkout a.txt能够恢复到修改前的状态。
git checkout a.txt(放弃a.txt文件的修改)
or
git checkout . (放弃全部文件的修改)
加入远程库
以上全部的操作都是在本地进行。可是假设你想要开源你的项目或者一个小组共同开发维护一个公司的项目,那么代码终于要提交的server上的一个仓库。所以就要加入远程库,每天把修改的代码推送到远程库上。
远程库中存放代码的server,你能够自己搭建一个gitserver,也能够使用github的仓库,可是存放到github上的代码都是共享的,全部人都能够看到你的代码。
github 一个奇妙的站点
既然你须要把你的代码推送到远程库中,那么你的代码推送过去的时候肯定须要一个暗号 告知远程库是你提交的代码。(远程库:暗号! 你:天王盖地虎。
提交成功)
所以就须要:
SSH Key – 本地Git仓库和GitHub仓库之间的传输是通过SSH加密的
- 创建SSH Key
在用户的主文件夹下。看看有没有.ssh文件夹,或者终端输入cd ~/.ssh,没有的话创建则一个
ssh-keygen -t rsa -C "youremail@xx.com"
一路回车。就能够在.ssh文件夹下看到id_rsa 和 id_rsa.pub两个文件
登陆Github
打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”。填上随意Title,在Key文本框里粘贴id_rsa.pub文件的内容:
Github同意加入多个SSH Key。也就是你能够用多个电脑共同修改一个project,在公司用公司的电脑,回家以后用自己的电脑。
扩展 – 配置多个git远程仓库的SSH Key切换
另一种情况。可能你要在一台电脑上开发多个project,比方自己的项目和公司的项目。这时候应该怎么办。
这样的情况就须要去针对不同的仓库生成不同的id_rsa 文件
ssh-keygen -t rsa -C "youremail@xx.com" -f id_rsa_second
这时候就会在.ssh文件夹中生成 id_rsa_second 和 id_rsa_second.pub两个文件;
1. 然后在把id_rsa_two.pub文件配置到你的github上。
2. 在~/.ssh文件夹下创建config文件,加入代码例如以下:
Host my.test ##能够随意命名,链接时使用这个名字
HostName github.com ## 上面配置的名字相应的链接地址
User git
Port 22
IdentityFile ~/.ssh/id_rsa_second
如今你从github上clone一个项目:
原clone地址:git clone git@github.com:second/test.git
可是假设你想用自己的账号配置(即上面配置)来clone这个项目:
则使用:git clone git@my.test:second/test.git
配置完以上信息后,如今就能够開始动手把你本地的项目推送到server上:
在github上创建一个仓库(repository):
1 . 然后把本地仓库与git仓库关联 – git remote
git remote add origin git@github.com:xxx/learngit.git
##注:origin后的git@github.com:xxx/learngit.git是你的github仓库的地址
2 . 把本地仓库内容推送到git仓库 – git push
git push -u origin master ##是把当前分支master推送到远程
第一次推送时加上了-u參数。Git不但会把本地的master分支内容推送的远程新的master分支。还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就能够简化命令。
其它的一些重要命令
git stash – 代码储藏
当你在开发中肯定会遇见这样的情况,你正在dev分支开发一些新功能,但这时线上有个bug反馈,你须要去master分支修改bug。可是你dev上的代码还不能提交,由于提交上去可能会引起项目报错,导致其它同事拉去代码后无法执行。此时就须要使用git stash 命令。
git stash
此时在通过git status命令查看工作区。发现是干净的,等你在master上修改完以后再返回dev分支,执行
git stash list
stash@{0}: WIP on dev: 6224937 add merge ##刚才存储代码的日志
git stash pop ##恢复代码
也能够用
git stash apply atash@{0} ##恢复指定的stash
pwd – 查看当前路径
git remote – 查看远程库的信息
git remote –v – 查看远程库的具体信息
參考文章:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
http://blog.jobbole.com/78960/
http://omiga.org/blog/archives/2269