版本控制
- 本地版本控制
- 集中版本控制,svn(所有的版本数据都保存在服务器上,协同开发追从服务器上同步更新或上传自己的修改,多对一,多个人开发,一个服务器)缺点:历史版本都存在中心服务器上,服务器崩了,数据就丢失了
- 分布式版本控制,git,(所有版本信息仓库全部同步到本地的每个用户,可以在本地查看所有版本历史,可以离线在本地提交,只需要在联网的时候push到相应的服务器那里即可,不会因为服务器所坏或者网络问题,造成不能工作的情况)
git和svn最主要的区别
svn是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用到都是自己的电脑,所有首先要从中央服务器得到最新的版本,然后进行工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求比较高。
git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网,因为版本都在自己电脑上。协同方式:比如自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时候你们两只需要把各自的修改推送给对方,就可以互相看到对方的修改了
git是世界上最先进的分布式版本控制系统
配置个人信息
git config --global user.name coderguan
git config --global user.email 8793112313@qq.com
查看个人配置的全局信息 git config --global -- list
查看个人的配置信息: cat ~/.gitconfig
git分为四个区域
- 工作区(用开发工具打开一个项目,就可以理解为工作区),working area
- 暂存区:工作区添加了一些文件,文件当中添加了代码,需要用 git add 把这些文件添加到跟踪信息当中
- 本地仓库:git commit把暂存区的文件添加到本地仓库中
- 远程仓库:实现中心化版本控制
基本命令
git add -A 提交所有变化
git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
git commit
git commit -m '备注 '
git diff 检察工作区和暂存区的区别
远程仓库创建后的关联:(这里是没有勾选readme的操作)
git remote add origin '远程仓库地址'
git push -u origin master
创建本地仓库
- 创建全新的仓库,git init
- 克隆全程仓库 git clone
文件忽略
分支
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作
列出所有分支
git branch
git branch -r # 查看远程分支
创建并切换到该分支
- git checkout -b dev
- git switch -c dev
check命令加上-b表示创建并切换,相等于以下两条命令
git branch dev
git checkout dev
切换分支
git checkout master
git switch master
合并分支
在新建的dev分支中修改文件后,执行add commit,再切换回master分支,会看不到之前dev修改的数据,
dev分支工作完成后,切换回master分支执行合并分支操作git merge dev,git merge命令用于合并指定分支到当前分支,
记得合并完执行add,commit
合并完可以删除分支了,git branch -d dev
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>或者git switch <name>
创建+切换分支:git checkout -b <name>或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
创建分支并完成工作后自测,自测没问题后将新的分支推送到远程,别人拉取下来检查新的分支,确认无误合并者后将master分支和新分支合并
合并者:
git checkout -b dev origin/dev 创建本地分支dev并关联拉取远程分支dev
冲突的出现
记得使用git bash来解决
master分支修改text.txt 第三行,执行add commit ,而dev分支也修改text.txt 第三行,执行add commit ,
此时切换到主分支master,执行git merage dev,会出现冲突提醒,请先解决冲突。执行git status可以快速查看到冲突的文件
cat xxx.txt可以查看冲突处
合并失败会提示具体的文件,通过vscode打开文件就会显示采用当前还是传入的
选择后执行git add .(或者文件名) 和commit后gitbash中的合并中状态merging就消失了
推送并关联:优先使用这种
本地创建分支test后,add commit后执行 git push --set-upstream origin test,会在远程自动创建并关联远程分支test,之后执行git push即可把test分支上的代码自动推送到远程分支test
git推送本地分支到远程分支
开分支有两种方式:
- 一种是在远程开好分支,本地直接拉下来;
- 一种是本地开好分支,推送到远程.
远程先开好分支然后拉到本地
git checkout -b feature-branch origin/feature-branch //检出远程的feature-branch分支到本地
本地先开好分支然后推送到远程,冒号前后代表本地分支和远程分支
$ git checkout -b feature-branch //创建并切换到分支feature-branch
$ git push origin feature-branch:feature-branch //推送本地的feature-branch(冒号前面的)分支到远程origin的feature-branch(冒号后面的)分支(没有会自动创建
git pull 和git fetch的区别
git pull:相当于是从远程获取最新版本并merge到本地
git fetch:相当于是从远程获取最新版本到本地,不会自动merge
使用码云
1.注册登录码云,完善个人信息
2.设置本机绑定ssh公钥,实现免密码登录(重要)
# 进入c:\users\Administrator\.ssh 目录
# 生成公钥,在任意位置执行以下代码,2种方式皆可
ssh-keygen
ssh-keygen -t rsa ## rsa指的是非对称加密
会生成2个文件id_rsa和id_rsa.pub, pub指的是公钥,另外一个是私钥
3.将公钥信息public key 添加到码云账户中即可!
4.使用码云创建一个自己的仓库
删除文件
git rm test.txt
git commit -m ''
git push (如果有关联远程仓库的话)