1.什么是Git(傻瓜内容跟踪器)
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目
Git 是 Linus Torvalds (Linus在1991年创建了开源的Linux)为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
2.Git发展的历史:
1.在2002年以前,世界各地的志愿者把源代码文件通过diff的方式发给Linus,然后由Linus本人通过手工方式合并代码!(因为Linus坚定地反对CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用)
2.到了2002年,Linux系统已经发展了十年了,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满,于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统。
3.安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。
Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:
4.Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。
Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费而超级好用的Git了。
3.与SVN的对比
集中式版本控制系统(中央服务器)
缺点:
1.每次提交代码都需要联网(没网,或者网速比较慢)
2.每次提交都是直接提交到中央服务器,自己做项目不可能一气呵成,却没有自己的代码管理版本
分布式版本控制系统(每个人的电脑都有一个库)
优点
1.不需要联网(相对的,比如最终代码的合并是需要联网的)
2.可以有一个自己的版本库,不污染其他成员的代码,也方便自己的管理(强大的分支管理)
4.Git安装
Ubuntu 14.04安装:sudo apt-get install git
Windows下载
git config —global user.name “zhangsan"
git config —global user.email “zhaorongzhang@126.com"
创建版本库
1. 新建目录 test
2. git init:将此目录变为git可以管理的仓库
.git:跟踪管理版本的,不要随便修改里面的文件
文件操作
git status 查看当前工作区状态(如果有红色的表示有可以上传到暂存区的文件)
touth 文件名(a1.html) 创建新文件
git add readme.txt 添加文件到暂存区
git commit -m “第一个文件” 提交文件到版本库,并做说明!(提交之后看是否提交成功输入git status 若出现
表示已提交成功 )
git diff readme.txt 比较readme.txt的前后版本不同地方
当在次保存git的时候首先输入指令git add 文件名 然后在git commit -m "这是第一次修改内容"
git log 查看历史版本
git log --pretty=oneline 只输出一行(显示的是版本id号和版本信息)
git reset —hard HEAD^ 回退到上一个版本
git reset —hard HEAD~10 回退上10次
git reset —hard 3C3981 回退到指定的版本
git reflog 查看版本历史
工作区和暂存区
工作区:test目录就是工作区
版本库:.git
暂存区:state
head:指针
master:当前分支
git add readme.txt 将文件添加到暂存区
git commit -m “修改" 将暂存区的文件合并到当前的分支
git跟踪管理的是修改,而非文件
vi index.php(修改index.php)
git add index.php(将index.php文件添加到暂存区)
vi index.php(再次修改index.php)
git commit -m “修改"
撤销修改:
git checkout — readme.txt 撤销readme.txt在工作去的修改
git reset HEAD readme.txt 将暂存区的文件撤销,重新放回工作区(但是修改的内容并不会删除,需要删除,还需要git checkout —readme.txt)
删除文件
git add readme.txt
git commit -m “添加readme.txt"
两种办法
1.rm readme.txt 直接删除
2.git rm readme.txt
git commit -m “delete readme.txt"
撤销办法:
删除文件,还没有提交:直接使用git checkout — readme.txt
已经提交,找回删除文件(版本会退):使用 git reset —hard HEAD^
将代码存储到远程仓库(Git支持的协议很多,最安全的方式:采用非对称密钥对)
1.生成密钥对
ssh-keygen -t rsa - 123456@qq.com"
2.在windows是家目录下有一个.ssh目录,进去目录找到 id_rsa.pub 文件
将id_rsa.pub的内容拷贝到远程仓库的管理处 settings处
3.OK搞定,以后所有的下载和上传都在ssh协议,会非常方便
现有本地库,再有远程库,做本地库关联远程库
1.在github上新建一个空仓库
3.git push -u origin master 向远程仓库提交文件
先创建远程库,从远程库克隆(一般就是下载别人的源代码)
当第二次把项目上传到远程仓库时:
先将远程仓库与本地仓库关联 git remote add origin git.michaelliaolearngit git remote add origin git.zhaorongzhang/learngit.git 出现错误信息 fatal: remote origin already exists.的时候
解决办法: 1.先输入 $git remote rm origin
2.在输入git remote add origin git.zhaorongzhang/learngit.git
分支管理
1. 开发周期较长,一个功能需要时间较长,不能提交,也不能丢
2. 当修复网站之前的bug的时候
创建与合并分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
解决冲突:
因为是直接修改文件,所以直接去掉不需要的内容
查看分支的合并情况
查看分支合并情况
分支管理策略
合并分支时,加上参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而合并就看不出来曾经做过合并。
Bug分支
把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash
查看被存储的工作现场
恢复工作现场
git stash apply 恢复
git stash drop 删除
上述两条命令合并为一条:git stash pop:恢复并删除
恢复到指定的stash:
0
多人协作:
查看远程仓库信息
显示更佳详细的信息
git remote -v
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
git push origin master
如果要推送其他分支,比如,就改成:
git push origin dev
但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?
- 分支是主分支,因此要时刻与远程同步;
- 分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
- bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
- feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!
同步更新远程仓库
git pull
也失败了,原因是没有指定本地分支与远程分支的链接,根据提示,设置和的链接:
--set-upstream dev origin/dev
settofrom
标签:
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
忽略文件: .
创建个人网站
1.首先登陆上自己的github
2.点击新建
3.创建个人仓库 , 必须用自己的 用户名.github.io
4.创建
5.加上说明文件 , 打上勾
6.创建好之后
详细教程请看廖雪峰git教程
- Cordova webapp实战开发:(3)后面可能会学到的东西
在<Cordova webapp实战开发:(2)认识一下Cordova>中我们了解了Cordova和Phonegap的关系,并简要介绍了一下它的架构,以及多平台性,并给大家留了一些作业.我 ...
- node.js的http模块的基础 学到的东西
node.js的http模块的基础 学到的东西 其中客户端:我们在node.js中如果要请求服务端中的js或者其他脚本的话要使用http.request()方法他会返回http.ClientReque ...
- 在IBM学到的东西,到底对我的程序生涯产生了多大的影响
我和很多人交流过一个有趣的现象,那就是刚毕业到30岁这段时间,会觉得时间过得很慢,总觉得自己还很年轻,但是一旦过了30岁,时间就如白驹过隙,一年又一年飞逝而过. 我自己也是,眼瞅着毕业快15年了,15 ...
- 【C++初学者自学笔记一】(把自己刚学到的东西做一下总结,如果有哪些地方不足请留言指正)
这是我写的第一个博客关于C++的一些笔记,我不会写的太深奥,因为这样很多人会看不懂(我刚开始学C语言深受其害).个人觉得C++这门语言有些类似于C语言但是有些函数的用法还是有不一样的.C语言中的头文件 ...
- 07.GitHub实战系列~7.Git之VS2013团队开发(如果不想了解git命令直接学这篇即可)
GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...
- 新的一年快开始了,学点新东西吧,从React开始(一)
ReactJS是Facebook出的前端View框架,好东西啊. 看看它的说明: 仅仅是UI 许多人使用React作为MVC架构的V层. 尽管React并没有假设过你的其余技术栈, 但它仍可以作为一个 ...
- Git从零开始怎么学?
最近,公司项目代码版本库管理,全部从svn 迁移到Git 最近了解了一段时间 近期会把整个Git使用过程陆续分享 如何从零开始使用Git
- 让Git不再难学
写在前面 在团队做过软件开发的,版本控制必是不可或缺的一项.目前,版本控制主要分为集中式版本控制系统和分布式版本控制系统 ,即大家熟知的SVN和Git.Git是当下最流行的分布式版本控制系统,故,今天 ...
- day70:Vue:Git&路飞学城页面效果
目录 1.Git 2.路飞学城项目页面效果 0.安装elements UI 1.顶部导航栏效果 2.轮播图效果 1.Git 什么是git?分布式版本管理工具 1.git操作 # 1 创建git本地仓库 ...
随机推荐
- iOS @@创建NSURL的字面量
@@ 是创建 NSURL 的字面量的绝佳方法(例如:@@"http://example.com")
- 2015 ACM Syrian Collegiate Programming Contest
A. My Friend of Misery 计算出答案的上下界即可. 时间复杂度$O(n)$. #include<bits/stdc++.h> using namespace std; ...
- 基于UDP协议的socket编程示例
客户端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; impo ...
- 【BZOJ】3542: DZY Loves March
题意 \(m * m\)的网格,有\(n\)个点.\(t\)个询问:操作一:第\(x\)个点向四个方向移动了\(d\)个单位.操作二:询问同行同列其他点到这个点的曼哈顿距离和.强制在线.(\(n \l ...
- Shader实例:一台旧电视
准备: 1.一段小视频 2.一张电视机贴图 3.一张过滤图 效果: 让视频内容只在电视机屏幕区域显示 Shader代码:有注释 Shader "Joe/old_tv" { Prop ...
- MSSQL 死锁查询
SELECT SYS.DM_EXEC_REQUESTS.SESSION_ID,TEXT AS '执行SQL',CLIENT_NET_ADDRESS AS '请求IP',SYS.DM_EXEC_CONN ...
- php开发常见问题
ajax 方面: ajax写法: //简写版ajax$.get('url.php',{'name':'myname','age':'18'},function(data){},'json'); ...
- mysql数据库迁移
由于yum安装mysql的时候,数据库的data目录默认是在/var/lib下,出于数据安全性的考虑需要把它挪到/data分区.步骤如下: 一.关闭apache和mysql. 复制代码 代码如下: s ...
- PHP 代码片段记录
检查URL是否为图片地址 getimagesize() Function check_img($file) { $x = getimagesize($file); switch ($x['mime'] ...
- [SonarQube]小结
新的项目用了这个,以前从来没用过,配置了一下,看看这个到底是个什么东东. 先学习一下英文单词: sonar 声纳, qube 方盒子, 连起来应该叫声纳盒, SonarQube一看就是一个监测诊断设备 ...