版本控制工具之git
git存储区域详解
命令快速总结
初始化
git init 当前文件夹初始化
代码提交
git add file/. 自动检测工作区修改的内容提交到暂存区
git status 查看当前文件夹工作区的状态:是否有内容修改
git commit -m '描述' 暂存区内容提交到仓库
代码回滚
git checkout file 暂存区回滚到工作区
git reset --hard '版本号' 回滚到指定版本的工作区
git reset --soft '版本号' 将指定版本回滚到暂存区
git reset --mix '版本号' 将指定版本回滚到修改过的内容
查看版本日志
git log 查看日志信息: 命令(版本号) 作者 时间 版本描述
git log --pretty=oneline 日志信息:版本号 版本描述
git reflog 日志信息:版本号缩写(7位) HEAD(x) 命令 操作记录 注:git log: 若回滚到之前的版本,后面的版本将不会显示 git reflog会显示所有版本信息
删除文件
rm file
git add/rm file
git commit -m 'delete'
撤销删除操作
rm file
git checkout --file 回滚至修改前的状态 rm file
git add file
git reset HEAD file
git checkout --file 回滚至提交到暂存区前的状态 rm file
git reset --hrad '版本号' 回滚至指定版本号
第一阶段:基础命令
1. 初始化
git init 初始化,会生成一个.git文件, 所有版本信息都放在此文件 查看当前文件夹的状态: git status 编辑代码 ...
2. 提交代码到暂存区 工作区 -> 暂存区
git add src 把代码放入git 暂存区
# git add . 提交所有修改的文件
git status 此时刚才add文件变成了绿色
3. 创建提交记录(版本) 暂存区 -> 仓库
git commit -m '版本描述' 把代码从暂存区放在git仓库 stage->master
git config --user.email 1271570224@qq.com
git config --user.name zhangyafei
git commit -m 'vue第一个版本' git status 此时已经为空,表示提交的所有文件已经放在了git仓库
4. 修改代码:比如我修改了README.md
git status 查看当前的代码状态
发现刚刚修改的文件变为了红色
5. 提交修改记录
git add .
git commit -m '修改README描述
6.git log 查看git日志
输出:命令(版本号),作者,时间,版本描述
fei@home-fei MINGW64 /e/前端/vue/vue学习/vue_project/luffy (master)
$ git log
commit 1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c
Author: 张亚飞 <1271570224@qq.com>
Date: Wed Jan 23 10:47:56 2019 +0800 完善README描述 commit 7866d35d2af1691705047127a620ab293f29f8f8
Author: 张亚飞 <1271570224@qq.com>
Date: Wed Jan 23 10:39:25 2019 +0800 vue第一个版本
7. git log --pretty=oneline
输出:版本号,版本描述
fei@home-fei MINGW64 /e/前端/vue/vue学习/vue_project/luffy (master)
$ git log --pretty=oneline
1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c 完善README描述
7866d35d2af1691705047127a620ab293f29f8f8 vue第一个版本
8. git reflog 查看所有版本操作
输出:版本号 修改顺序(最近修改的在前)
fei@home-fei MINGW64 /e/前端/vue/vue学习/vue_project/luffy (master)
$ git reflog
1cf1f43 HEAD@{0}: reset: moving to 1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c
7866d35 HEAD@{1}: reset: moving to 7866d35d2af1691705047127a620ab293f29f8f8
1cf1f43 HEAD@{2}: commit: 完善README描述
7866d35 HEAD@{3}: commit (initial): vue第一个版本
9. 回滚操作
- git reset --hard HEAD^ 把把版本号回滚至上一个
- git reset --hard 指定版本号(太长的可以写前六位) 回滚至指定的版本
$ git reset --hard 7866d35d2af1691705047127a620ab293f29f8f8
HEAD is now at 7866d35 vue第一个版本 $ git reset --hard 1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c
HEAD is now at 1cf1f43 完善README描述
10. 修改代码
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: src/App.vue no changes added to commit (use "git add" and/or "git commit -a")
11. 撤销修改
修改过的内容 -> 上一次提交的状态
- git checkout file 回滚
- git checkout readme 撤回对代码做的修改,回滚到上一次提交的状态 将代码从工作区备份回滚到修改之前的状态
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: src/App.vue no changes added to commit (use "git add" and/or "git commit -a") fei@home-fei MINGW64 /e/前端/vue/vue学习/vue_project/luffy (master)
$ git checkout src/App.vue
12. 暂存区 -> 修改过的内容
git reset HEAD file
13. 提交的版本 -> 暂存区
git reset --soft 版本号
14. 提交的版本 -> 修改过的内容
git reset --mix 版本号
15. 提交的版本 -> 原内容 即回滚到指定版本号
git reset hard 版本号
16. 删除一个文件并提交
rm file 本地删除
git add/rm file 提交到暂存区
git coommit -m 'delete' 从仓库删除
17. 删除一个文件 -> 撤销删除操作回到删除前的状态
rm file
git checkout -- file 撤销修改
18. 删除一个文件并提交至暂存区 -> 撤销删除操作并回滚至删除前的状态
rm file
git add/rm file 提交到暂存区
git reset HEAD file ,从暂存区回滚到工作区
gir checkout -- file ,把工作区里操作删除回滚
第二阶段:分支协作
情景再现:假设公司产品已经上线,要继续研发功能,你正在研发一个新功能,此时线上产品出bug了,需要你马上解决一下,或者临时新功能到来,这时你会怎么办?
方式一:stash
git stash:用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区。
git stash 将新增加的功能放到一个神奇的地方,代码回到修改之前的状态 开始解决bug
...
解决完问题并提交代码,产品上线 git stash pop 将新增加的功能和现有代码合并
注:此时会出现两种情况 1.顺利合并 2.合并冲突,需要手动解决 冲突
$ git stash pop
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md 代码
<<<<<<< Updated upstream =======
> bug
- 新功能
>>>>>>> Stashed changes
stash相关常用命令:
- git stash 将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
- git stash list 查看“某个地方”存储的所有记录
- git stash clear 清空“某个地方”
- git stash pop 将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
- git stash apply 编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)
- git stash drop 编号,删除指定编号的记录
git stash作用,帮助我们暂时存储已经开发一些功能的代码,继续做其他事情,做完之后,再回来继续开发
方式二:branch
git branch dev 创建一个新的dev分支
git checkout dev 你跳转到dev分支开发新功能
git add .
git commit -m 'xxxx' 公司产品出现Bug git branch master 跳转到master分支
git branch dev2 创建一个dev2分支解决bug
git checkout dev2 找另一个人跳转到dev2分支解决bug
... 解决完bug
git add .
git commit -m '修改bug‘ 提交代码 git checkout master 跳转到master分支
git merge dev2 将master与dev2分支进行合并 git branch -d dev2 删除dev2分支 这个过程中你可以继续在dev分支上进行开发,开发完成之后
git add .
git commit -m ’新功能完成' git branch master
git merge dev master分支与dev分支进行合并,发生冲突手动解决
branch常见命令
- git branch 查看分支
- git branch dev 创建分支dev
- git checkout dev 跳转到分支dev
- git branch bug
- git merge bug 合并分支bug
- git branch -d bug 删除分支bug
第三阶段:代码托管
情景再现:自己在家里的电脑写完代码要带到公司继续开发,u盘?有风险
- 需要一个代码托管的网站:github、Bitbucket、码云
- 自己创建一个代码托管的网站:gitlab
- 注册账号:
- 用户名:邮箱
- 密码:
将本地代码上传到github
前提:在github上创建一个项目,克隆远程地址
git可以是用该URL进行向远程推送版本信息或获取版本信息
git remote add origin https://github.com/zhangyafeii/rest_vue.git
# git pull --rebase origin master 代码合并 可能需要
git push -u origin master 代码推送到远程master git checkout dev 切换到dev分支
git push -u origin dev 将代码推送到远程dev分支
从远程下载代码到本地
git clone https://github.com/zhangyafeii/rest_vue.git
注:默认只下载master分支 git pull origin dev 从远程下载dev分支,直接下载到本地工作区。等于以上两步
- git fetch origin dev 从远程下载到本地版本库
- git merge origin/dev 将本地版本库与工作区合并 git rebase origin/dev 保持提交记录的整洁
# git pull origin master
# git fetch origin master
# git merge origin/master
场景模拟
回到家:
git pull origin dev 从远程下载dev分支
修改代码
git add .
git commit -m '描述'
git push origin dev 将本地代码上传到远程 去到公司
git pull origin dev
修改代码
git add .
git commit -m '描述'
git push origin dev
第四阶段:多人协同开发
1. 允许他人操作程序
- - 合作者
- - 创建组织
2. 分支
- - master
- - dev
- - zhangyafei
- - chenyun
情景模拟
开发功能初期
员工A回到家
git clone https://github.com/zhangyafeii/rest_vue.git
git branch A
git checkout A 编写代码 git add .
git commit -m '描述' git push origin A 这时远程将会自动创建A这个分支 员工B回到家
git clone https://github.com/zhangyafeii/rest_vue.git
git branch B
git checkout B 编写代码 git add .
git commit -m '描述' git push origin B 这时远程将会自动创建B这个分支 功能完成合并分支
员工A
git clone https://github.com/zhangyafeii/rest_vue.git
git branch A
git checkout A 编写代码 git add .
git commit -m 'A功能开发完成' git push origin A # 第一个开发完成,首先合并比较轻松
git checkout dev
git merge A
git push origin dev 员工B
git clone https://github.com/zhangyafeii/rest_vue.git
git branch B
git checkout B 编写代码 git add .
git commit -m '描述' git push origin B # 注意:
git checkout dev
git merge B
git push origin dev
# 报错
$ git push origin dev
To https://github.com/WuPeiqi/dbhot.git
! [rejected] dev -> dev (fetch first)
error: failed to push some refs to 'https://github.com/WuPeiqi/dbhot.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details. # 第二个以后开发完成,得先拉下dev分支,然后在最新dev分支上合并,否则会报错
# 正确:
git pull origin dev
git checkout dev
git merge B
git push origin dev
3. 规则
- - 一起合并
- - 合并时间:1/2
4. 做代码review
- 如何做代码review?
- 创建review分支:
- 谁来锁代码review?
- 组长
- 带你的人
第五阶段:给别人代码贡献力量
问题: 如果你要在github上给别人代码添加功能?
- fork
- pull request
1. 不用反复输入用户名密码登录
Https:
https://用户名:密码@github.com/zhangyafei/rest_vue.git
git remote add origin https://用户名:密码@github.com/zhangyafei/rest_vue.git SSH:
git@github.com:WuPeiqi/dbhot.git 前提:获取ssh的key
$ ssh-keygen.exe
cd /c/Users/fei/.ssh fei@home-fei MINGW64 ~/.ssh
$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDC7Aj9QiwzWu1tOheUSEFP2XQOZ57V8mjKIKufV7qVnWx/IEg7W4/8NzDAP51drpraJcJ+eYJvltrqQzUAwdkBKmtv+VaameRseoHLvHio3BLtiw35q8LuDH4L2f0DvCXpphISF9XGkr4rEgswbPFAG8tZwEjw6sm2uOyeCyfeZHDrZKbx/Xy/4Yz6wuPjWVUj65TdsmNtvu99xjTW84pKklDUN+EIErtWyUQqljwWiwqKfEqSFyEPfLJ+OTbGxldbt14eI2nfJvvhIw42TKkpeR7JTC4EPZpHszlj54XiGpavyLBwxPtkGHKR7W9vgC7ctq0qq5nXZud8FUJ7TdD/ fei@home-fei
2. gitignore文件
创建github项目的时候选择gitignore python
3. 版本
git tag -a v1.0 -m '版本介绍' 本地创建Tag
git show v1.0 查看
git tags -n 查看本地Tag
git tag -l 'v1.4.2.*' 查看本地Tag,模糊匹配
git tag -d v1.0 删除Tag
git push origin :refs/tags/v0.2 更新远程tag
git checkout v.10 切换tag
git fetch origin tag V1.2 git push origin --tags
git pull origin --tags
git clone -b v1.0 https://github.com/zhangyafeii/rest_vue.git
版本控制工具之git的更多相关文章
- 分布式版本控制工具:git与Mercurial(zz)
分布式版本控制工具:git与Mercurial [收藏此页] [打印] 作者:cyfdecyf 2007-12-26 内容导航: 第1页 [IT168 技术文档] 说到版本控制工具,很 ...
- 【版本控制工具】 Git基础
一.Git简介 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.于是Git 成了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件. (Git目前使用率非常 ...
- 【版本控制工具】 Git进阶1
一.Git常用命令 Git中的很多命令与Linux相同(比如修改,查询,编辑,移动等),这里可以参考我之前的一篇文章https://www.cnblogs.com/ywb-articles/p/105 ...
- 版本控制工具之git的常用命名01
基本命令 从git远程仓库导出项目:git clone http://127.0.0.1/name_master/server.git 从git远程仓库拉取代码:git pull 查看本地仓库状态:g ...
- 版本控制工具比较-CVS,SVN,GIT
首先介绍几个版本控制软件相互比较的重要依据: a.版本库模型(Repository model):描述了多个源码版本库副本间的关系,有客户端/服务器和分布式两种模式.在客户端/服务器模式下,每一用户通 ...
- Git版本控制工具学习
Git代码管理工具学习 分布式管理工具:git 相比较svn它更加的方便,基本上我们的操作都是在本地进行的. Git文件的三种状态:已提交,已修改,以暂存. 已提交:表示文件已经被保存到本地数据库. ...
- Git版本控制工具(三)----远程仓库GitHub的使用
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- git版本控制工具(二)----本地版本库的常用操作
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Git版本控制工具(一)----git的安装及创建版本库
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
随机推荐
- angualr跨域访问配置
浏览器对于javascript的同源策略的限制,例如a.cn下面的js不能调用b.cn中的js,对象或数据(因为a.cn和b.cn是不同域),所以跨域就出现了: 简单的解释就是相同域名,端口相同,协议 ...
- SQLServer之创建隐式事务
隐式事务创建注意事项 IMPLICIT_TRANSACTIONS为 ON 时,系统处于“隐式”事务模式. 这意味着如果 @@TRANCOUNT = 0,下列任一 Transact-SQL 语句都会开始 ...
- LeetCode算法题-Longest Univalue Path(Java实现)
这是悦乐书的第290次更新,第308篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第158题(顺位题号是687).给定二叉树,找到路径中每个节点具有相同值的最长路径的长度 ...
- Docker: 企业级镜像仓库Harbor部署(http)
Harbor离线安装包下载地址:https://github.com/goharbor/harbor Docker compose(安装harbor需要用到docker compose)下载地址:ht ...
- 【Teradata UDF】中文按字符查找chs_instr
一.场景描述 数据库为ASCII编码单字节存储,在查询中文时可能会出现错误结果.例如查询like“房”字,会查询出不含“房”,含“朔科”的结果. select * from Tablename01 w ...
- php 表单提交大量数据发生丢失的解决方法
最近在项目中,出现一个奇怪的现象,有一个大form里面有上千个input,提交的时候,老是发现post过来的数据不完整,一开始还怀疑是html 表单名称有冲突,排除掉了.然后,网上找了一堆,php.i ...
- Busybox的syslogd认识与使用
关键词:rcS.start-stop-daemon.syslogd.syslog().klogd.klogctl().syslog.conf./dev/log.facility/level等等. sy ...
- 4-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(为域名申请SSl证书)
3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(购买域名,域名绑定IP) 然后就是等着..... 假设可以了 咱呢是配置MQTT实现SSL安全加密通信,所以 ...
- Spring Cloud 入门教程(七): 熔断机制 -- 断路器
对断路器模式不太清楚的话,可以参看另一篇博文:断路器(Curcuit Breaker)模式,下面直接介绍Spring Cloud的断路器如何使用. SpringCloud Netflix实现了断路器库 ...
- 在Bootstrap开发框架中使用bootstrap-datepicker插件
在基于Boostrap的Web开发中,往往需要录入日期内容,基于Boostrap的插件中,关于日期的录入可以使用bootstrap-datepicker这个非常不错的插件,以替代默认的type=dat ...