Git是一个免费、开源的版本控制软件,目前世界上最早进的分布式版本控制系统(没有之一)python
版本控制是一种记录一个或若干个文件内容变化,以便未来查阅特定版本修订状况得系统。git
记录文件的全部历史变化github
随时可恢复到任何一个历史状态web
多人协做开发或修改面试
错误恢复编程
版本控制的工具:安全
- svn 集中式版本控制系统服务器
- git 分布式版本控制系统分布式
CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢:svn
集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是本身的电脑,因此要先从中央服务器取得最新的版本,而后开始干活,干完活了,再把本身的活推送给中央服务器。
中央服务器就比如是一个图书馆,你要改一本书,必须先从图书馆借出来,而后回到家本身改,改完了,再放回图书馆。
集中式版本控制系统最大的毛病就是必须联网才能工做。
分布式版本控制系统根本没有“中央服务器”,每一个人的电脑上都是一个完整的版本库,这样,你工做的时候,就不须要联网了,由于版本库就在你本身的电脑上。
既然每一个人电脑上都有一个完整的版本库,那多我的如何协做呢?比方说你在本身电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,大家俩之间只需把各自的修改推送给对方,就能够互相看到对方的修改了。
和集中式版本控制系统相比,分布式版本控制系统的安全性要高不少,由于每一个人电脑里都有完整的版本库,某一我的的电脑坏掉了没关系,随便从其余人那里复制一个就能够了。而集中式版本控制系统的中央服务器要是出了问题,全部人都无法干活了。
在实际使用分布式版本控制系统的时候,其实不多在两人之间的电脑上推送版本库的修改,由于可能大家俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。
所以,分布式版本控制系统一般也有一台充当“中央服务器”的电脑,但这个服务器的做用仅仅是用来方便“交换”你们的修改,没有它你们也同样干活,只是交换修改不方便而已。
Git的优点不单是没必要联网这么简单,后面咱们还会看到Git极其强大的分支管理,把SVN等远远抛在了后面。
Github是全球最大的社交编程及代码托管网站(https://github.com/)。
Github能够托管各类git库,并提供一个web界面(用户名.github.io/仓库名)
Git是版本控制软件
Github是项目代码托管的平台,借助git来管理项目代码
项目背景:这个创业者想开发选课系统
首先在你建立的项目的文件夹里面右键--->点击Gir Bash Here---->吧git运行起来。
git init,初始化,表示即将对当前文件夹进行版本控制
git init
Git的版本库里存了不少东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为咱们自动建立的第一个分支master,以及指向master的一个指针叫HEAD
由于咱们建立Git版本库时,Git自动为咱们建立了惟一一个master分支,因此,如今,git commit就是往master分支上提交更改。
你能够简单理解为,须要提交的文件修改统统放到暂存区,而后,一次性提交暂存区的全部修改。
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的全部内容提交到当前分支。
git add . #全部的文件 git add README.md #具体添加的文件
git status查看当前状态,红色表明未跟踪的文件,绿色表明跟踪的文件(能够被版本库管理)
查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。
将暂存区的文件提交到版本库的分支。
必定记得先add,后commit,add以后是没有放到版本里的,只有commit的时候才有版本
查看提交记录,即:历史版本记录
Git把管理的文件分为了两个区域四个状态。
add到暂存状态的时候成绿色了,在commit的时候就没有了
提供了这个回滚的功能。
HEAD
指向的版本就是当前版本,所以,Git容许咱们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。
用git log
能够查看提交历史,以便肯定要回退到哪一个版本。
用git reflog
查看命令历史,以便肯定要回到将来的哪一个版本。
git diff HEAD -- readme.txt
命令能够查看工做区和版本库里面最新版本的区别git checkout -- file
。git reset HEAD <file>
,就回到了场景1,第二步按场景1操做。- 开发直播功能
当项目开发到一半的时候,就是在此时线上运行平台出现Bug须要紧急修复,以前的版本出现bug了怎么办?
解决思路:使用分支
默认会有一个master的分支。只作线上的版本,注意不要在master分支上修改,要修改的话就建立一个bug分支
一、建立一个修复bug的分支:git branch bug ,这个bug分支是在master分支上建的,至关于拷贝了一份
二、查看一共有几个分支 : git branch
三、跳转到bug分支:git checkout bug
四、跳转到master分支:git branch master
五、建立一个开发新功能的分支:git branch dev #只作开发的版本
如今就有三个分支了,每一个分支都是不同的,bug修复完了,如今就要合并在master上了。
六、master和bug分支合并:git merge bug
七、删除bug分支:git branch -d bug
八、继续开发,切到dev:git branch dev
九、开发完毕,master和dev合并:git merge dev
切换以前必定记得把你的代码提交一下
git add .
git commit -m '修改bug'
合并的时候可能出现冲突,可能不出现,出现冲突了就得手动解决
@-PC MINGW64 ~/PycharmProjects/stucourse/core (master) $ git branch bugdev # 建立分支bugdev @-PC MINGW64 ~/PycharmProjects/stucourse/core (master) $ ls __pycache__/ main.py* Manager.py* pickle_util.py* School.py* Student.py* Teacher.py* @-PC MINGW64 ~/PycharmProjects/stucourse/core (master) $ git checkout bugdev #切换分支bugdev Switched to branch 'bugdev' M core/main.py @-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev) $ touch b.log #增长文件 @-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev) $ git add . #提交到暂存区 @-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev) $ git commit -m 'bugdev' #提交到版本库,修复bug [bugdev 7fc00b8] bugdev 2 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 core/b.log @-PC MINGW64 ~/PycharmProjects/stucourse/core (bugdev) $ git checkout master #切换到master分支 Switched to branch 'master' @-PC MINGW64 ~/PycharmProjects/stucourse/core (master) $ ls __pycache__/ main.py* Manager.py* pickle_util.py* School.py* Student.py* Teacher.py* @-PC MINGW64 ~/PycharmProjects/stucourse/core (master) $ git merge bugdev # 合并bugdev分支 Updating 8562916..7fc00b8 Fast-forward core/b.log | 0 core/main.py | 3 +-- 2 files changed, 1 insertion(+), 2 deletions(-) create mode 100644 core/b.log @-PC MINGW64 ~/PycharmProjects/stucourse/core (master) $ ls #查看文件内容,多了b.log文件 __pycache__/ b.log main.py* Manager.py* pickle_util.py* School.py* Student.py* Teacher.py* @-PC MINGW64 ~/PycharmProjects/stucourse/core (master) $ git branch -d bugdev #删除bugdev分支 Deleted branch bugdev (was 7fc00b8). @-PC MINGW64 ~/PycharmProjects/stucourse/core (master) $ git branch #查看全部分支 dev * master $ git checout dev 继续开发dev内容 开发完内容以后,在master上合并dev内容 $ git checkout master $ git merge dev
流程图
branch相关经常使用命令: git branch 分支名称 建立分支 git checkout 分支名称 切换分支 git branch -m 分支名称 建立并切换到指定分支 git branch 查看全部分支 git branch -d 分支名称 删除分支 git merge 分支名称 将指定分支合并到当前分支
面试题:当公司代码出现bug时候怎么办?
解答:建立一个bug分支,修复bug后,合并到主分支上,而后删除bug分支
合并+将提交记录合并到一条主线上,提交记录整洁
云端须要一个存放代码的地方用Github或码云等
公共的
- Github是用来作代码托管的
- 码云,作代码托管
- csdn code ,作代码托管
内部搭建:
- gitlab
一、登陆Github
在家里:
就会有这样一个地址,咱们就能够用这个地址来提交
git remote add origin https://github.com/XXX/study1.git #给远程项目起一个别名origin git push -u origin master #把本地项目分支提交到GitHub远程项目
在公司:
家里: git add . git commit -m 'xx' git remote add origin https://github.com/WuPeiqi/greenlu.git git push origin master 公司: # 新公司第一次获取代码 方式一 git clone https://github.com/WuPeiqi/greenlu.git 方式二 git init git remote add origin https://github.com/WuPeiqi/greenlu.git git pull origin master 直接拿回来 方式三 git init git remote add origin https://github.com/WuPeiqi/greenlu.git 这的两句至关于git pull origin master 这一句 git fetch origin master 拿到分支上了 git merge origin/master 合并在一块儿 # 往后 git pull origin master # 或者 git fetch origin master git merge origin/master # 若是你在本地修改问题,又add,又提交,在线上去拿的时候,或许会冲突
当你在家的时候吧代码上线了。到了公司之后吧线上的代码拉回来。
git pull origin dev开始写代码了。写完以后add commit。。。这时候忘了往github上提交了回到家的时候,那今天写的代码没提交,怎么办呢?回公司太晚了,在写一遍浪费时间,或许你还记着今天写的代码,就在这基础上又开发了,这下提升了警记了,就记得提交了 add 、commit 、git push origin dev次日又到公司了,那昨天的代码怎么办呢、、?是拉下来呢?仍是推上去呢?若是你推上去的话,没有冲突还好,若是有冲突的话,那你把你的冲突都上线了,不让你提交,因此咱们要先拉下来先去吧代码拉下来,git pull origin dev 可能会有冲突,解决冲突。