git版本控制-详细操作
- git,软件帮助使用者进行版本的管理
阶段一git 命令:
git init 初始化
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
git add .
git commit -m '描述信息'
git log 回滚,回滚之后在提交版本,就之后的不会保留在这里,保留在reflog里
git reset --hard asdfooiusdfsdfadf # reset 复位
git reflog 回滚后查之前的版本,在恢复 # reflog 回流
git reset --hard asdfooiusdfsdfadf
git add .
git status 红色
git commit -m ''
git status 绿色
git checkout -- filename 就是不提交退出
git status 无
阶段二:
问题: 开发直播功能(一周开发完成),要紧急修复bug
线上正在运行出现bug,跟你开发的新项目没有关系,现在要修复这个bug
解决方法一:
git stash 将当前工作区的修改过(开发)的代码暂存到某个地方中,代码恢复到之前的版本(线上bug版本),修改好后还是需要提交个版本,才能恢复
线上代码
开发代码
git stash
线上代码bug恢复
git add .
git commit -m 'bug修改完成'
开发代码恢复
git stash pop
- 不产生冲突
- 产生冲突,手动去解决
error: Your local changes to the following files would be overwritten by merge:
git stash 将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
git stash list 查看“某个地方”存储的所有记录
git stash clear 清空“某个地方”
git stash pop 将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
git stash apply 编号 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)
git stash drop 编号 删除指定编号的记录
解决方法二:分支
bug
master分支
dev分支
git branch 查看分支
git branch dev 创建分支
git branch -d dev 删除分支
git checkout dev 切换分支,下面也是冲突导致
error: you need to resolve your current index first
git merge dev 分支合并
线上代码提交过add,commint,然后再开发的时候发现之前代码有bug
修复Bug流程:
创建开发分支,在这里开发,提交
git branch dev 创建开发分支
git checkout dev 切换到开发分支
# 写代码
--写开发代码
# 在开发分支提交版本
git add .
git commit -m 'xxx'
git checkout master 切换到master你会发现它是线上版本,没有开发的版本
# 创建bug分支,来修改bug,也就是线上bug
git branch bug
git chekcout bug
# 修复bug
git add .
git commit -m '紧急修复bug'
=====到此,dev里面是开发新的东西,bug里面是要修复线上的bug,master里面是线上的东西
# 切换到master来合并bug,(注意,bug里面的修复也是需要提交)
git checkout master
git merge bug
# bug修复后,就可以删掉这个分支
git branch -d bug
# 继续在dev里面开发,然后提交,最后合并,手动解决冲突即可
git checkout dev
# 最后需要在master上add,commit,提交最后版本
阶段三:三里屯和于辛庄
云端需求一个存放代码的地方:
公共:
- github,做代码托管
- 码云,做代码托管
- csdn code,做代码托管
内部搭建:
- gitlab
家里:
# 开发代码,并且提交版本
git add .
git commit -m 'xx'
# github起别名,将代码推送到github上
git remote add origin https://github.com/jokerbj/firstpro.git 给后面的这个地址起了个别名origin,remote(远程意思,远程的源)
git push origin master 将当前的版本代码推送到远程的master分支上
# 切换分支
git branch dev
git push origin dev 将开发版本代码推送到远程的dev分支上
公司:新公司第一次获取代码,三种方式
# 克隆获取项目 (测试目录GongSi,拉下来之后有firstpro)
git clone https://github.com/jokerbj/firstpro.git 在当前目录就会有项目firstpro
ls -l / cd firstpro / git status / git branch / 只会克隆下来master这个分支
git branch dev 创建dev分支
git checkout dev 切换至分支
git pull origin dev 拉dev分支
# 创建文件获取代码
# 打开个文件目录,在里面创建个同项目名称的目录(GongSi,mkdir firstpro) *目录也可以不创建
git init
git remote add origin https://github.com/jokerbj/firstpro.git
git pull origin master
git branch dev 创建dev分支
git checkout dev 切换至分支
git pull origin dev 拉dev分支
# 创建文件获取代码,不需要在文件目录里面创建项目目录
git init
git remote add origin https://github.com/jokerbj/firstpro.git
git fetch origin master 完毕后,ls并没有内容,拉到了工作区,也就是分支区,所以就需要合并
git merge origin/master 合并,跟网上下载下来的分支合并
git fetch origin dev 拉到了工作区,也就是分支dev区,所以就需要合并
git branch dev 创建dev分支
git checkout dev 切换至分支
git merge origin/dev 拉dev分支
# 第一次以后,就不需要上面克隆,或者添加源文件
git pull origin master
git push origin master
git fetch origin master
git merge origin/master
# 本地冲突演示,更改本地s1文件(未提交),然后在github上更改s1文件
需要在dev分支操作
git pull origin dev # Please add your changes or stash them before you merge.
git status 查看状态,还在工作区,需要 git add .
git pull origin dev # Please commit your changes or stash them before you merge.
git status 查看状态,拿过来等待提交,需要 commit
git commit -m 'xxx' 提示冲突
'''
Auto-merging s1.py
CONFLICT (content): Merge conflict in s1.py
Automatic merge failed; fix conflicts and then commit the result
'''
# 手动解决冲突,线上的内容应该会在本地内容的下面
将>>> head 删除,然后提交,将会覆盖,在拉下来
# 真实场景
家里。公司
分支dev 里面都是一样内容
家里 在s1文件里面写点东西
vi s1.py
git add .
git commit -m 'xxx'
git push origin dev
公司 下拉代码
git pull origin dev
** 到公司了,写了代码,只做了add,commit但是忘记了push ?
家里 到了家里,发现在公司写的代码忘记了push?
没有关系,继续开发新的代码,然后add,commit,push。
公司 到了公司,不能push,因为公司代码晚,家里代码新,git不允许这么做,所以是pull拉家里代码。
解决冲突,继续开发代码,然后add, commit, push
家里 到了家里,pull公司代码
# 协同开发
阶段三:
master
dev
review 开发老大没问题,代码合并到dev
bb 开发者 代码合并到review
sk 开发者 代码合并到review
wh 开发者 代码合并到review
协同开发:
- 项目协作者,github 找到项目firstpro -- settings -- Collaborators
- 组织协同,github + new organization -- people邀请成员 -- settings设置权限
PS: 创建组织
真实案例协同开发:
----
第一个人
git pull,最后在创建自己的开发目录bb
git clone https://github.com/jokerbj/firstpro
cd firstpro
git branch dev
git checkout dev
git pull origin dev 下拉github上dev代码
git branch review 创建reivew分支,用于提交测试
add,commit
git push origin review 将reivew分支提交上去
git checkout master 切到master分支,将代码同步到到自己开发分支目录
git branch bb 创建自己开发分支,保证代码与第二个人一样,也用review
git checkout bb 切换到自己分支
----
第二个人
git clone https://github.com/jokerbj/firstpro
cd firstpro
git branch dev 线上开发目录
git pull origin dev 拉线上dev代码
git branch review 老大审计目录
git pull origin review 拉线上老大目录
git branch sk 自己开发目录
git checkout sk 切换到自己分支
git pull origin review 将线上review审计的代码下拉到自己开发分支
----
各自在自己的分支目录创建开发文件
git add .
git commit -m '第一次提交'
git push origin bb/sk
各自在自己的分支目录开发文件中写入文件
git add .
git commit -m '小功能开发完毕'
git push origin bb/sk
----
合并,切到review分支,拉下review代码,看看是不是有新的,没有,将自己的review与自己的开发目录
第一个人
git checkout review
git pull origin review
git merge bb
git status 是否干净
git push origin review 提交第一个的代码
第二个人同第一个人
git checkout review
git pull origin review
git merge sk
git status 是否干净
git push origin review 提交第一个的代码
第一个人注意,还要再拉一次才能保持最新
给老大看分支,老大说可以,就要放到dev分支,再没问题放到线上master,或者放到预发布分支
面试题:公司代码review怎么做?谁来做?review分支,开发小功能合并,给小组长看,小组长也开发代码,开发核心代码.(固定时间,一起来做review)
面试题:怎么做协程开发的?每个人都有自己分支,小功能开发固定时间提交到review,在提交到dev,最后master
阶段四:
fork,人家代码,自己fork就是将代码在自己项目里面拷贝了一份,你可以贡献代码。
面试题: 如何给别人的源码贡献代码,就是通过fork一下拷贝到自己这里,new pull request,create pull request,对面接受就是贡献(合并)
注意事项:
add . 这里面有隐藏文件(.pyc),pycharm notepadd++ 客户端不一样,不要把所有的代码提交,尤其是个人文件,自己ide文件,显得不专业
手动 不要加文件
自动
- .gitignore 文件
在当前git init下,直接vim .gitignore,里面写入不想提交的文件名字,.idea/ *.py .py[cod] 支持正则
- 认证,在之前的github不支持记住密码的,所以用的是用户凭证,在项目克隆那里可以看到
SSH:(ssh协议)
在git init目录下
ssh-keygen 三下回车,cd ~ 进入登陆用的家目录,cd .ssh/,cat id_rsa.pub ,复制到github上面,settings ssh andd gpg keys,new ssh key,复制过来 起个名字
git remote add origin git@github.com:ugfly1210/git_projects.git
Https:(http协议)
https://github.com/ugfly1210/git_projects.git
rebase
忘记push解决方法
之前解决方式,忘记push-----,用于查图的时候分支太多不好看
首先 在家里
git init
git remote add origin https://github.com/jokerbj/firstpro
touch a.py -- vim a.py
git add .
git commit -m '在家里'
git push origin master
然后 在公司
git clone https://github.com/jokerbj/firstpro
进入firstpro目录
vi a.py
git add .
git commit -m '在公司开发碰到美女'
*** 忘记上传
然后 在家里
vim a.py
git add .
git commit -m '凌晨三点开发'
git push origin master
然后 在公司
git fetch origin master
git merge origin/master
这样拉代码的时候就会产生冲突,手动解决冲突
git add .
git commit -m 'xxx'
git push origin master
rebase 解决方法,其实就是在合并的时候不用merge,而是使用rebash
合并解决方法,也是忘记push-----,查图的时候分支一条线
git fetch origin master
git rebase origin/master
冲突,手动解决冲突
vim a.py
git status 查看一下状态,冲突解决完了,让咱们add一下
git add . 表示解决完冲突
git status 让我执行,git rebase --continue
git rebash --continue 这个表示合并完了,如果不执行这个,就会返回工作区
git push origin master
git status
合并的三种方法
git pull origin master (公司常用)
git fetch origin master
git merge origin/master
git fetch origin master
git rebase origin/master
git add .
git rebase --continue
git版本控制-详细操作的更多相关文章
- git版本控制工具(二)----本地版本库的常用操作
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Git详细操作
Git详细操作 一.本地配置 1公钥钥配置 1.参考帮助文档:https://gitee.com/help/ 仓库管理 =公钥管理 =生成/添加SSH公钥 ssh-keygen -t rsa -C & ...
- git超详细教程
GitHub操作总结 : 总结看不明白就看下面的详细讲解. GitHub操作流程 : 第一次提交 : 方案一 : 本地创建项目根目录, 然后与远程GitHub关联, 之后的操作一样; -- 初始化Gi ...
- Git版本控制教程
Git 版本控制入门 不了解Git请查看权威Git书籍 ProGit(中文版). 一份很好的 Git 入门教程,点击这里查看. Git客户端下载地址: 官方Git - TortoiseGit - So ...
- Git 版本控制工具(学习笔记)
GIT(分布式) 一.Git 初始版本控制工具 1. 安装Git Ubuntu系统下,打开shell界面,输入: sudo apt-get install git-core 之后回车输入密码,即可完 ...
- Git版本控制与工作流详解
这篇文章是针对git版本控制和工作流的总结,如果有些朋友之前还没使用过git,对git的基本概念和命令不是很熟悉,可以从以下基本教程入手: 专为设计师而写的GitHub快速入门教程 git – 简明指 ...
- Git版本控制:Git查阅、撤销文件修改和撤销文件追踪
http://blog.csdn.net/pipisorry/article/details/47867097 查看文件的修改历史 git log --pretty=oneline 文件名 # 显示修 ...
- 七 Git版本控制
把环境准备 主机名 node1 ip地址10.0.0.11 node2 10.0.0.12 node3 ...
- 使用Git版本控制工具管理GitHub
使用Git版本控制工具管理GitHu Git是一个分步式的管理系统:只要上传操作得当,所有的都可以相当于是中央服务器,成员代码共享,A写的代码B也有,一般把一个人当做主机,其他人通过该主机拼装代码 ...
随机推荐
- "Entity Framework数据插入性能追踪"读后总结
园友莱布尼茨写了一篇<Entity Framework数据插入性能追踪>的文章,我感觉不错,至少他提出了问题,写了出来,引起了大家的讨论,这就是一个氛围.读完文章+评论,于是我自己也写了个 ...
- Python StringIO实现内存缓冲区中读写数据
StringIO的行为与file对象非常像,但它不是磁盘上文件,而是一个内存里的“文件”,我们可以像操作磁盘文件那样来操作StringIO.这篇文章主要介绍了Python StringIO模块,此模块 ...
- Django Celery Redis 异步执行任务demo实例
一.windows中安装redis 安装过程见 <在windows x64上部署使用Redis> 二.环境准备 requirements.txt Django==1.10.5 celery ...
- UVALive 4998 Simple Encryption
题目描述: 输入正整数K1(K1<=5000),找一个12位正整数K2使得K1K2=K2(mod 1012). 解题思路: 压缩映射原理:设X是一个完备的度量空间,映射ƒ:Χ→Χ 把每两点的距离 ...
- C++空类和string类
1. 空类 1.1 空类默认哪六个成员函数. class Empty { public: Empty(); //缺省构造函数 Empty e; Empty( const Empty& ); / ...
- opencv:图像的创建和储存
示例代码: #include <opencv.hpp> #include <vector> using namespace std; using namespace cv; v ...
- IOS对存放对象的数组排序
我们开发的每个程序都会使用到一些数据,而这些数据一般被封装在一个自定义的类中.例如一个音乐程序可能会有一个Song类,聊天程序则又一个 Friend类,点菜程序会有一个Recipe类等.有时候我们希望 ...
- 微信小程序转支付宝小程序
使用方法: npm install wx-alipay -g wxToalipay --src={{小程序源码目录}} --dest={{支付宝小程序目录,可缺省}} 点击回车后就可将微信小程序转换为 ...
- linux下安装boost
linux平台下要编译安装除gcc和gcc-c++之外,还需要两个开发库:bzip2-devel 和python-devel,因此在安装前应该先保证这两个库已经安装:#yum install gcc ...
- win10如何在局域网中设置一台电脑的固定ip地址
在工作和生活中,经常要遇到远程访问一台电脑的情况,但是在局域网中如果不进行设置,通常一台电脑的ip是自动生成的,,没有固定,这就导致下次访问这个地址时,不能正常访问,下面就交大家如何在win10系统中 ...