Git 一个强大的版本控制工具
来源:互联网 发布:单片机定时器流程图 编辑:程序博客网 时间:2024/06/05 15:56
前言
一什么是分布式 什么是集中式
1 分布式就是文件在每台参与开发的机器中都是完整包 当你修改开发相关的内容 你的修改会被推送到其他的机器上
2 集中式就是所有的完整文件在一台公用的服务器上 你想做开发可以 你得先从服务器上 下载文件 做完修改你再返回到这台公共服务器上
两者的区别 分布式是不需要联网的 集中式在网速比较慢的情况下 每次都需要从服务器上下载文件非常的不方便
二 git的安装
1输入git
来询问你的Linux有没有安装git
如果提示没有安装 则
先从Git官网下载源码,然后解压,依次输入:./config,make,sudo make install这几个命令安装就好了。
2 win下的git安装
https://git-for-windows.github.io/
下载 安装一直下一步
最后打开git bash来自爆一下家门
$ git config –global user.name “Your Name” $ git config –global user.email “email@example.com”
三 git仓库的创建与添加文件
1 仓库的创建
首先你得需要mkdir
相应的目录
然后使用git init
来告诉git这是个仓库(执行的时候你得在这个仓库目录下)
2 把文件添加到仓库
使用git add
文件名来添加文件(但前提是这个文件必须在仓库目录下)
之后使用git commit -m “说明”
来解释这个文件的作用
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
$ git add file1.txt $ git add file2.txt file3.txt $ git commit -m “add 3 files.”
这样就是以上这次提交的共有说明
部分总结
初始化一个Git仓库,使用git init
命令。
添加文件到Git仓库,分两步:
第一步,使用命令git add <file>
,注意,可反复多次使用,添加多个文件;
第二步,使用命令git commit
,完成。
四 查看git的状态
git status
命令可以让我们时刻掌握仓库当前的状态
git diff
可以查看修改内容
五 版本回退 从你的仓库里拿出历史文件
其实commit就是一个快照 一个存储点 他存储了整个版本 你下次可以通过这个commit去回述历史版本
git log
就可以查看拿到历史的版本
git log –pretty=oneline
简化信息
Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164…882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
使用git reset –hard HARD^ 来回溯上个版本+
那么回溯了之后又想回到之前的版本怎么办呢 前提是不关闭这个窗口 然后使用下来的命令
hard后面的是之前的commit号
$ git reset –hard 3628164 HEAD is now at 3628164 append GPL
为什么回溯的速度这么快呢 因为这个HEAD其实只是一个指针 改一下指向的东西就可以了
那么如果要是我们关闭了计算怎么回去呢
$ git reflog
里面记录了我们最近的操作
这里面的排列方式是从下网上 时间排序
六 git中的暂存区和工作区
之前我们说了 在git中添加文件会有两部 第一步 add 第二部 commit
其实在git中 工作区就是我们实际的文件区域 保存区域 而.git文件夹里面就是git的版本库
版本库里有暂存区和head指向的master
可以这样理解 你使用add命令 添加你的所有更改 把这些更改去保存到暂存区 而commit则一次把你的更改创造一个快照
把你的更改去写入一个真正的树中
所以在git中 所谓的干净 clean的意思就是 暂存区中没有文件
工作区的文件其实就是映射自版本库的head指向master
一旦改变head的指向 那么你这个工作区的文件也会改变
七 git中的
Git是如何跟踪修改的,每次修改,如果不add到暂存区,那就不会加入到commit中。
每次的commit都是从暂存区去获取的 你不add就肯定不会commit
两者密不可分
八 撤销修改
1 git checkout — file
可以丢弃工作区的修改:
$ git checkout — readme.txt
命令git checkout — readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
2 Git同样告诉我们,用命令git reset HEAD file
可以把暂存区的修改撤销掉(unstage),重新放回工作区
所以如果你的文件修改了并且放到了暂存区里面 你得先用reset 去踢出暂存区 然后用checkout 去还原工作区的改动
九 删除与还原
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
我们如果在工作区中不小心删除了文件 那么git可以帮我们使用checkout从版本控制区还原这个文件
命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容
10 连接你的github
origin为远程端的名字
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git
;
关联后,使用命令git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin maste
r推送最新修改;
可能会出现publickey不匹配的情况 可以在本地生成 key 具体方法如下
ssh-keygen
然后系统提示输入文件保存位置等信息,连续敲三次回车即可,生成的SSH key文件保存在中~/.ssh/id_rsa.pub
接着拷贝.ssh/id_rsa.pub文件内的所以内容,将它粘帖到github帐号管理中的添加SSH key界面中。
打开github帐号管理中的添加SSH key界面的步骤如下:
登录github
点击右上方的Accounting settings图标
选择 SSH key
点击 Add SSH key
在出现的界面中填写SSH key的名称,填一个你自己喜欢的名称即可,然后将上面拷贝的~/.ssh/id_rsa.pub文件内容粘帖到key一栏,在点击“add key”按钮就可以了。
添加过程github会提示你输入一次你的github密码
添加完成后再次执行git clone就可以成功克隆github上的代码库了。
十一 git中的分支
首先 一个主master是不适合多人共同去开发的 因为你做的事情很容易干扰其他人的开发 所以一般开分支 在开分支的情况下 你的库是你分支的库 你的工作文件夹也是从这个分支去映射出来的 比如你再分支下创建了个文件夹 然后添加进库中 切换你的分支成master 你的那个文件夹会消失
当然一开始创建分支的时候 文件还是从master里面的克隆了文件
Git鼓励大量使用分支:
查看分支:git branch创建分支:git branch <name>切换分支:git checkout <name>创建+切换分支:git checkout -b <name>合并某分支到当前分支:git merge <name>删除分支:git branch -d <name>
十二 分支的合并
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log –graph
命令可以看到分支合并图。
先找到冲突文件 然后修改文件 重新提交 最后删除 分支
十三 分支管理策略
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
首先,仍然创建并切换dev分支:
$ git checkout -b dev Switched to a new branch ‘dev’
修改readme.txt文件,并提交一个新的commit:
现在,我们切换回master:
$ git checkout master Switched to branch ‘master’
准备合并dev分支,请注意–no-ff参数,表示禁用Fast forward:
$ git merge –no-ff -m “merge with no-ff” dev Merge made by the ‘recursive’ strategy. readme.txt | 1 + 1 file changed, 1 insertion(+)
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
合并后,我们用git log看看分支历史:
$ git log –graph –pretty=oneline –abbrev-commit * 7825a50 merge with no-ff |\ | * 6224937 add merge |/ * 59bc1cb conflict fixed …
本来是吸收完然后删除分支 你不知道添加了什么
但是这样家 -no-ff 就可以创建新的commit
给他写个-m 就有了相应的信息
十四 分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
小结
Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
- Git 一个强大的版本控制工具
- Git---强大的版本控制工具
- Git 是一个分布式版本控制工具
- 版本控制工具git
- git版本控制工具
- GIT - 版本控制工具
- Git 版本控制工具
- 版本控制工具--Git
- Git-版本控制工具
- Git,版本控制工具
- 版本控制工具git
- 版本控制工具GIT
- git版本控制工具
- ubuntu下的版本控制工具-git
- Git版本控制工具的基本使用
- Git版本控制工具的使用一
- git版本控制工具的学习
- android---------版本控制工具Git的使用
- 通过 lua 进行 nginx redis 访问控制
- 正则表达式语法大全
- 基于Metronic的Bootstrap开发框架经验总结(3)--下拉列表Select2插件的使用
- 指针数组
- Tomcat、jboss、weblogic三者区别
- Git 一个强大的版本控制工具
- java——面向对象
- 几张图让你彻底了解JAVASE、JAVAEE、JAVAWEB整个的知识体系
- 源码-Oracle数据库管理-第十八章-事务和锁-Part 1(使用Oracle事务)
- 1622-5 孔富晨 总结《2016年12月28日》 【连续第89天总结】
- java.net.BindException: Address already in use: JVM_Bind解决方法
- windows7多余的启动菜单删除方法
- base64加密
- GreenDao (2.1.0 反射机制) 初步使用