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. Jenkins + Ant + Git + Tomcat自动化部署

    环境linux下,大致的配置内容如下: 首先安装JDK配置环境变量等. 其次安装ANT配置ANT_HONE并把bin目录加入PATH中. 然后安装Git,并生成sshkey配置ssh 安装tomcat ...

  2. JS里面的两种运动函数

    最新学了一个新的运动函数,与最初学习的有所不同,第一个运动是根据运动速度完成运动 ,第二个则是根据运动的时间来完成运动,而且把之前的函数都进行了一些兼容处理,在这里列出了看一下: 第一种animate ...

  3. 单元测试地二蛋 先弄个两个原生模块1个原始的一个jq插件

    放羊测试测完了再测这两个瞎搞的下拉列表组建 看看从单元测试模块化的角度组建会写成啥样 1:ajax请求 简单文本     2:1个页面多个实例     3:复杂展示+自定义点击+自定义处理函数     ...

  4. ZeroMQ接口函数之 :zmq_msg_init_data - 从一个指定的存储空间中初始化一个ZMQ消息对象的数据

    ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_msg_init_data zmq_msg_init_data(3) ØMQ Manual - ØMQ/3.2.5 ...

  5. 如何解决Linux下通过root无法远程登录

    解决问题 1.确认ssh服务已安装,通过普通用户连接成功: 2.确认ssh配置是否对root进行特殊设置,修改/etc/ssh/sshd_config文件中 PermitRootLogin witho ...

  6. 【Alpha】Daily Scrum Meeting第七次

    一.本次Daily Scrum Meeting主要内容 各队员的任务完成情况 文件选择器布局只是暂时使用,后期会改方式,放在后面解决. 接下去都要做什么 二.项目进展 学号尾数 今日已完成任务 接下去 ...

  7. ApplicationContext更强的功能-学习笔记

    ---恢复内容开始--- 一.国际化支持 二.资源访问 三.事件传递 国际化支持 ApplicationContext继承了org.springframework.context.MessageRes ...

  8. Javascript的shift()和push(),unshift()和pop()方法简介

    栈方法: Javascript为数组专门提供了push()和pop()方法,以便实现类似栈的行为.来看下面的例子: var colors=new Array();       //创建一个数组 var ...

  9. KVM 基本命令

    一.问题描述: KVM中宿主机通过console无法连接客户机,卡在这里不动了. # virsh console vm01 Connected to domain vm01 Escape charac ...

  10. HDU 4757 Tree(可持久化Trie+Tarjan离线LCA)

    Tree Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others) Total Su ...