这是我参与更文挑战的第9天,活动详情查看: 更文挑战
常见的版本控制工具
-
GIT
-
SVN
-
CVS
秉承一个原理:学习我们一定是学习当下最流行的
1, 前话
GIT版本控制的优点
1, 实现跨区域多人协同开发
2,追踪和记载一个或者多个文件的历史记录
3,组织和保护你的源代码和文档
4,统计工作量
5,并行开发,提高开发效率
6,跟踪记录这个软件开发的过程
2, 版本控制的分类
(1)本地版本控制
记录文件每次的更新,可以对每个版本做一个快照,或者是记录,适合个人
(2)集中版本控制(SVN)
所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改,用户的本地只有自己以前同步的版本,如果不连接网络,用户看不到历史版本,也无法切换版本,分支
(3)分布式版本控制(GIT)
每个人都拥有全部的代码!安全隐患
所有的版本信息仓库全部同步到本地的每一个用户,可以在本地查看所有版本,可以离线本地提交,不会因为服务器或者网络问题,导致不能工作的情况
GIT和SVN的区别
SVN 是集中式版本控制系统,版本库是集中放在中央服务器的,每次都是从中央服务器上获得最新版本,必须联网才能工作
GIT是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,
3, Git基本理论
Git 本地有三个工作区域,
(WorkSpace): 工作区,就是你平时存放项目代码的地方
(Index/Stage): 暂存区,就是临时存放你的改动,事实上就是一个文件
(Repository): 仓库去, 本地仓库,就是安全存放数据的位置,这里面有你提交的所有版本数据
(Remote): 远程仓库, 托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
对应的命令:
workspace写代码区 —>git add -> 暂存区—>git commit—>本地仓库—> git push —> 远程仓库
4, GIT 文件状态
Untracked: 未跟踪 —> git add .—> 暂存状态Staged
Unmodify: 未修改—> 版本库中的文件快照内容与文件夹完全一致
Modified: 文件已经修改, git add 进入Staged, git checkout 丢弃修改过,返回—>Unmodify
Staged: 暂存状态
5, 分支
# 列出所有的本地分支
git branch
# 列出所有的远程分支
git branch -r
# 新建一个分支,但依然停留在当前分支
git checkout [new-branch]
# 新建一个分支,并切换到该分支
git checkout -b [new-branch]
# 合并指定分支到当前分支
git merge master
# 删除本地分支
git branch -d [new-branch]
# 删除远程分支
git push origin --delete [new-branch]
6, 常用
# 删除本地分支
git branch -D test
# 删除远程分支
git push origin --delete test
# 撤回到指定的commit提交记录中
git reset --hard commitId
# 远程拉取代码
git fetch origin master
# 合并指定的提交
git cherry-pick 62efcd
# git从一个仓库迁移到另外一个仓库
git remote add origin2 master (给原创仓库起一个名称:origin2)
git remote set-url origin2 http://xxxx.git (设置远程仓库origin2的地址)
git push origin2 (把master仓库提交到远程仓库Origin2:master分支上)
# 取消本地目录下关联的远程库
git remote remove origin
# 远程分支已经删除,但是git branch -a 依然显示
1, 查看远程分支 git branch -r
2, 查看本地和远程分支的关系 git remote show origin
3, 删除所有远程污浊的分支 git remote prune origin
# 修改commit 提交注释
git commit --amend (修改当前最近的一次commit提交注释)
# 开发过程中标准必用的git命令 (merge方案)
git status -查看文件状态
git add * - 添加到缓存区
git commit -m '本次提交解决什么问题' (提交到本地仓库)
git pull origin dev (更新远程分支到本地)
git push origin dev (推送本地分支到远程)
git checkout branch_stg_one (切换分支)
git merge dev (合并其他分支)
7, 配置
# 用户名,npm镜像配置
git config --global user.email 'xxxx.com.cn'
git config --global user.name 'xxxx'
npm config set registry https://registry.npmjs.org/
npm config set registry http://registry.npm.taobao.org/
# Git 简写配置
1, cd ~ 到根目录
2, ls -al 查看根目录下所有的隐藏文件
3, vim .gitconfig 直接打开编辑
配置别名:
[user]
name = zhengliming
email = zhengliming511@pingan.com.cn
[alias]
br = branch
st = status
co = checkout
ci = commit
ps = push
pl = pull
mg = merge
line = log --oneline
pre = log --pretty=oneline
cp = cherry-pick
sa = stash
tree = log --graph --pretty=oneline --abbrev-commit
[pull]
rebase = true
# 查看归档的细节
git log -p
# 查看最近一次归档文件的改动细节
git show
# 添加文件到暂存区的区别
功能上看似很相近,但还是存在一点差别
git add . 所有变化提交到暂存区,但不包括被删除的文件,并且会根据.gitignore做过滤
git add * 同上,但是git add * 会忽略.gitignore把任何文件都加入
git add -u 他会将被修改的文件提交到暂存区。add -u 不会提交新文件
git add -A 提交所有变化
# git stash 缓存
当你在dev上做开发的时候,这个时候项目出现了一个bug,需要紧急修复,但是你的项目刚开发完一般,还不想提
交,这时候,可以用git stash ,命令 将修改的内容保存至堆栈中,然后顺利的切换到hotfix分支进行修复,完
成后,再次切换到dev分支,从堆栈中恢复刚刚保存的内柔
由于疏忽,本该在dev上开发的内容,却在master上进行了开发,你需要重新切到dev上开发,可以用 git stash
将内容保存到堆栈中,切回到dev分支后,再次恢复内容即可
1, git stash
2, git stash save '保存注释'
、
stash@{0}: On zlm: 0227
stash@{1}: WIP on master: 14b03d3 update
、
3, git stash list 查看当前stash 内容
4, git stash pop 将当前stash 中的内容弹出,并应用到当前分支对应的工作目录上去,会清空此次 暂存在
堆栈中的内容
5, git stash apply stash@{0} 将堆栈中的内容应该到当前目录,不同与git stash pop, 该命令不会将
内容从堆栈中删除,可用于多个分支,堆栈中没有删除
6, git stash drop stash@{0} 从堆栈中移除指定的stash
7, git stash clear 情况堆栈中的内容
8, git stash show stash@{0} 查看指定的stash和当前的目录差异
9, git stash show stash@{0} -p 查看详细的不同
10, git stash branch 从最新的stash创建分支