资料地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000html
http://www.cnblogs.com/wupeiqi/p/7295372.htmllinux
1、git的起源 ?git
git是Linux的创始人Linus为了管理linux的版本而花了两个星期写的。以前用过一段时间BitKeeper这个软件,github
后来闹出矛盾了,一个道歉就能够解决的事,做为一个特立独行的大牛,Linus索性本身搞。django
因此以后才能出现git和基于git的全球最大同性交友网站github。vim
大牛任性改变历史,普通人任性只能改变本身。windows
2、git的做用?服务器
从起源能够看出来,能够用做版本管理,特别是多人协做的状况下,在当今集团军做战的时代,git已经成为必不可少的分布式版本控制工具。app
3、 git的安装?运维
没有特殊的
windows 官网下载
Linux yum install git
4、git 命令大全
5、 git 原理
git 把当前文件夹在生成一个 .git 文件夹用做版本控制库,这个文件夹之后可能会很大,由于全部代码都存放在里面。
分为隔离的四个区,经过不一样命令实现内容改变,换句话说你作的全部改变的代码,都被做为素材提交到库中。
当咱们须要回到哪一个时刻,就把素材按照当时顺序组织,因此在内存角度没变多少,因此版本更替很快。
HEAD,一个指针,表明当前处理的版本
master,主分支,表明咱们主要的版本
dev,测试分支,表明咱们公司开发版本
xxx,本身名字,表明本身负责工做分支
平时master稳定运行,本身作完把本身分支向dev分支上merge,公司安排测试等测试dev版本,ok了运维部门安装到服务器,也就是上线。
分支合并简单状况,修改-----保存
分支合并冲突状况,解决冲突。先后冲突的文件中,冲突的内容二者都会显示,须要人工手动选择一个,修改完毕,再提交。
6、使用场景总结:
本地开始
$ pwd # 显示当前目录 $ git init # git初始化 $ git status # 查看当前git状态 $ git add . # 添加当前目录下全部文件到版本库 $ git commit -m '第一次提交' # 提交到版本库,并填写版本说明,以便之后回滚。 $ ls # 查看目录下文件 $ touch a.py # 建立新文件 $ git log # 查看历史版本提交记录(根据版本commit值能够进行回滚) $ git reset --hard 版本号 # 工做区向历史滚 $ git reflog # 查看回滚记录 $ git reset --hard 0972f4b # 工做区向将来滚
$ git checkout -- file # 撤回工做区修改,让这个文件回到最近一次或时的状态。这两个点至关于单机游戏中的存档点,执行就保存一次状态
$ git reset HEAD file # 撤回提交到暂存区的修改,工做区未退回,
$ git rm file # 删除文件,须要commit
$ git commit
$ git tag # 查看全部标签
$ git show tagename # 查看便签详细
$ git tag -a tagname -m message commit_id # 给commit建立标签,方便之后查看,默认是打在HEAD上
$ git tag -d tagname # 删除本地便签
$ git push origin tagname # 推送标签到远程库,便签不推不会到远程库
$ git push origin --tags # 推送所有标签git addgit commit
新功能开发方案
$ git branch dev # 建立新分支,即:拷贝一份当前所在分支代码到新分支 $ git checkout dev # 切换到dev分支 $ vim app01/views.py # 开发功能 $ git status # 查看状态,即:在dev分支修改了app01/views.py文件 $ git add . # 将修改文件添加到版本库的暂存区 $ git commit -m '新功能开发完毕' # 将暂存区的内容提交到当前所在分支,即:dev分支 $ git checkout master # 切换回master分支 $ git merge dev # 将dev分支内容合并到master分支
$ git branch -d dev # 新功能没完成,老板说不要了
$ git branch -D dev # 还没提交就不要了,强制删除
新功能开发中去修复bug之stash方案
$ vim app01/views.py # 开发直播功能,刚开发到一半 ,不想提交 $ git status $ git stash # 将开发到一半的直播功能,临时存储到“某个地方” $ git status # 工做区回到当前版本未作任何操做前 $ vim pondo/settings.py # 紧急修复bug $ git add . # 添加到修改bug的代码到暂存状态 $ git commit -m '紧急修复bug' # 提交修复Bug的代码到分支 $ git stash pop # 将开发到一半的直播功能从“某个地方”再次拿会工做区继续开发 stash 命令 git stash 将当前工做区全部修改过的内容存储到“某个地方”,将工做区还原到当前版本未修改过的状态 git stash list 查看“某个地方”存储的全部记录 git stash clear 清空“某个地方” git stash pop 将第一个记录从“某个地方”从新拿到工做区(可能有冲突) git stash apply 编号, 将指定编号记录从“某个地方”从新拿到工做区(可能有冲突) git stash drop 编号,删除指定编号的记录 例子 a. 原来内容: from django.shortcuts import render,HttpResponse def index(request): return render(request,'index.html') def africa(request): return HttpResponse('非洲专区') b. 在a基础上开发到一半直播功能: from django.shortcuts import render,HttpResponse def index(request): return render(request,'index.html') def africa(request): return HttpResponse('非洲专区') def live(request): print('开发到一半') return HttpResponse('....') c. 执行git stash,回到当前版本未修改状态a: from django.shortcuts import render,HttpResponse def index(request): return render(request,'index.html') def africa(request): return HttpResponse('非洲专区') d. 修复Bug并提交: from django.shortcuts import render,HttpResponse def index(request): return render(request,'index.html') def africa(request): return HttpResponse('非洲xxxxx专区') e. 继续开发直播功能 git stash pop,此时会出现冲突: $ git stash pop 表示app01/views.py存在冲突须要解决,此时文件内容为: from django.shortcuts import render,HttpResponse def index(request): return render(request,'index.html') def africa(request): <<<<<<< Updated upstream: # 修复Bug时更改的内容 return HttpResponse('非洲xxxx区') ======= # 修复Bug前正在开发新功能时的内容 return HttpResponse('非洲专区') def live(request): print('刚开发到一半') return HttpResponse('直播功能') >>>>>>> Stashed changes 须要自行解决冲突,而后继续开发,如: from django.shortcuts import render,HttpResponse def index(request): return render(request,'index.html') def africa(request): return HttpResponse('非洲xxxx区') def live(request): print('刚开发到一半') return HttpResponse('直播功能')
新功能开发中去修复bug之修补bug分支方案
$ git branch # 当前在master分支 $ git branch dev # 建立dev分支用于开发新功能 $ git checkout dev # 切换到dev分支 $ vim app01/views.py # 开发新功能到一半,须要紧急修复Bug $ git add . $ git commit -m '新功能开发一半' $ git checkout master # 切换回master分支 $ git branch bug # 建立修复bug分支 $ git checkout bug # 切换到bug分支 $ vim pondo/settings.py # 修改bug $ git add . # 提交bug $ git commit -m '紧急修复bug' # 提交bug $ git checkout master # 切换回master $ git merge bug # 将bug分支内容合并到master分支,表示bug修复完毕,能够上线 $ git checkout dev # 切换到dev分支,继续开发新功能 $ vim app01/views.py # 继续开发其余一半功能 $ git add . # 提交新功能 $ git commit -m '继续开发完成' # 提交功能 $ git checkout master # 切换回master分支 $ git merge dev # 将dev分支合并到master分支 branch相关经常使用命令: git branch 分支名称 建立分支 git checkout 分支名称 切换分支 git branch -m 分支名称 建立并切换到指定分支 git branch 查看全部分支 git branch -d 分支名称 删除分支 git merge 分支名称 将指定分支合并到当前分支
在家第一次推送远程库(github)
$ git remote add origin 地址 # 为地址起一个别名origin $ git push origin master # 将本地master分支内容以及版本信息推送到GitHub Username for '': # 输入GitHub用户名 Password for '': # 输入GitHub密码 $ git push origin dev # 将本地dev分支内容以及版本信息推送到GitHub
在公司第一次使用远程库继续开发
$ git clone https://github.com/WuPeiqi/pondo.git # 将项目从GitHub中获取 $ cd pondo/ # 切换到工做目录 $ git branch # 默认获取到得只有master分支 $ git branch dev origin/dev # 建立dev分支且和远程dev分支同步 $ vim app01/views.py # 继续开发新功能 $ git add . # 添加文件到版本库的暂存状态 $ git commit -m '公司开发功能1' # 提交新功能到版本库的分支 $ git push origin dev # 提交dev分支内容到远程GitHub托管仓库的dev分支 Username for '': Password for '':
回家继续开发
$ git checkout dev # 切换到dev分支 $ git pull origin dev # 从远程GitHub仓库获取dev分支最新内容,并合并到本地 $ vim app01/views.py # 继续开发新功能 $ git add . # 添加文件到版本库的暂存状态 $ git commit -m '家里开发功能1' # 提交新功能到版本库的分支
$ git push origin dev # 提交dev分支内容到远程GitHub托管仓库的dev分支
Username for '':
Password for '':
回公司继续开发
$ git checkout dev # 切换到dev分支 $ git fetch origin dev # 从GitHub仓库获取dev分支最新内容到版本库的分支 $ git merge origin/dev # 将版本库的分支内容合并到工做区 $ vim app01/views.py # 继续开发新功能 $ git add . # 添加文件到版本库的暂存状态 $ git commit -m 'xxxxxxxxxxx' # 提交新功能到版本库的分支
$ git push origin dev # 提交dev分支内容到远程GitHub托管仓库的dev分支
Username for '':
Password for '':
设置密钥(解决每次都要输入用户名,密码):
1. $ ssh-keygen -t rsa -C "youremail@example.com" #配置密钥
2. 一直默认回车
目录,里面有和两个文件,一个密钥,一个公钥
4. 将公钥复制给github3. .sshid_rsaid_rsa.pub
多人协做工做模式 :
1. 先pull下最新的版本,与本地合并 2. 工做 3. 全部人轮流push,(第一个只用push,其余人要先pull,再push,由于前人已经作了修改)