关于git自己所学到的东西

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于git自己所学到的东西相关的知识,希望对你有一定的参考价值。

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 “[email protected]"
 
创建版本库
     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 - [email protected]"
     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自己所学到的东西的主要内容,如果未能解决你的问题,请参考以下文章

计算机视觉入门

从Orchard学到的东西--第六篇 CacheManager 2

ali学到的东西--未来

hibernate Hibernate检索策略(类级别,关联级别,批量检索)详解

关于Date的基础操作

Hibernate学习———— Hibernate检索策略(类级别,关联级别,批量检索)详解