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上新建一个空仓库
     2.git remote add origin https://github.com/sxycjj/test.git      跟远程仓库关联     (删除远程库 git remote rm origin)
     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教程
 
 
 
 

关于git自己所学到的东西的更多相关文章

  1. Cordova webapp实战开发:(3)后面可能会学到的东西

    在<Cordova webapp实战开发:(2)认识一下Cordova>中我们了解了Cordova和Phonegap的关系,并简要介绍了一下它的架构,以及多平台性,并给大家留了一些作业.我 ...

  2. node.js的http模块的基础 学到的东西

    node.js的http模块的基础 学到的东西 其中客户端:我们在node.js中如果要请求服务端中的js或者其他脚本的话要使用http.request()方法他会返回http.ClientReque ...

  3. 在IBM学到的东西,到底对我的程序生涯产生了多大的影响

    我和很多人交流过一个有趣的现象,那就是刚毕业到30岁这段时间,会觉得时间过得很慢,总觉得自己还很年轻,但是一旦过了30岁,时间就如白驹过隙,一年又一年飞逝而过. 我自己也是,眼瞅着毕业快15年了,15 ...

  4. 【C++初学者自学笔记一】(把自己刚学到的东西做一下总结,如果有哪些地方不足请留言指正)

    这是我写的第一个博客关于C++的一些笔记,我不会写的太深奥,因为这样很多人会看不懂(我刚开始学C语言深受其害).个人觉得C++这门语言有些类似于C语言但是有些函数的用法还是有不一样的.C语言中的头文件 ...

  5. 07.GitHub实战系列~7.Git之VS2013团队开发(如果不想了解git命令直接学这篇即可)

    GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...

  6. 新的一年快开始了,学点新东西吧,从React开始(一)

    ReactJS是Facebook出的前端View框架,好东西啊. 看看它的说明: 仅仅是UI 许多人使用React作为MVC架构的V层. 尽管React并没有假设过你的其余技术栈, 但它仍可以作为一个 ...

  7. Git从零开始怎么学?

    最近,公司项目代码版本库管理,全部从svn 迁移到Git 最近了解了一段时间 近期会把整个Git使用过程陆续分享 如何从零开始使用Git

  8. 让Git不再难学

    写在前面 在团队做过软件开发的,版本控制必是不可或缺的一项.目前,版本控制主要分为集中式版本控制系统和分布式版本控制系统 ,即大家熟知的SVN和Git.Git是当下最流行的分布式版本控制系统,故,今天 ...

  9. day70:Vue:Git&路飞学城页面效果

    目录 1.Git 2.路飞学城项目页面效果 0.安装elements UI 1.顶部导航栏效果 2.轮播图效果 1.Git 什么是git?分布式版本管理工具 1.git操作 # 1 创建git本地仓库 ...

随机推荐

  1. iOS 单例模式范例

    The singleton pattern is useful for creating objects that are shared across the entire application, ...

  2. 跟我一起学JQuery插件开发

    http://www.cnblogs.com/Leo_wl/archive/2012/04/06/2435511.html 以前一直比较好奇,jquery插件是怎么开发的,怎么写属于自己的插件? 昨天 ...

  3. Redis 配置文件总结

    1.1 文件说明 1.1.1    主要文件说明 1 redis-server Redis服务器 2 redis-cli Redis命令行客户端 3 redis-benchemark redis-be ...

  4. java中强制类型转换

    在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需 ...

  5. Google 云计算中的 GFS 体系结构

          google 公司的很多业务具有数据量巨大的特点,为此,google 公司研发了云计算技术.google 云计 算结构中的 google 文件系统是其云计算技术中的三大法宝之一.本文主要介 ...

  6. 允许asp.net MVC报 错说明: 访问服务此请求所需的资源时出错。服务器可能未配置为访问所请求的 URL。错误消息 401.2。: 未经授权

    运行mvc3程序报以下错误 详细报错如下: “/”应用程序中的服务器错误. 访问被拒绝. 说明: 访问服务此请求所需的资源时出错.服务器可能未配置为访问所请求的 URL. 错误消息 401.2.: 未 ...

  7. PHP之简单实现MVC框架

    PHP之简单实现MVC框架   1.概述 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种 ...

  8. nodejs如何储存一个GBK编码的文件

    思路:utf-8 -> decode(to buffer) -> convert to gbk(buffer also) -> write buffer to file. var f ...

  9. sqlite在火狐中安装及使用

    1.SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目.它的设计目标是嵌入式的,而且目前已经在很多嵌入 ...

  10. selenium python的使用(二)

    1.selenium获取到的信息是 把页面加载完毕之后 获取异步加载的html源码 html=driver.find_element_by_xpath("/html").get_a ...