关于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 clone https://github.com/sxycjj/demo.git
当第二次把项目上传到远程仓库时:
先将远程仓库与本地仓库关联 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教程