今日内容
-
git介绍和安装
-
git使用流程
-
git常用命令
-
git忽略文件
-
git多分支
-
git远程仓库
-
ssh方式连接远程仓库
-
协同开发
-
冲突解决
-
线上分支合并
-
远程仓库回滚
1 git软件介绍和安装
# 代码管理软件
-git
-svn
# 它们能做的事情--->用来做代码管理[文件管理]
1 帮助开发者合并开发的代码,协同开发
2 如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突
3 代码版本管理
# git 和 svn比较
svn:集成式管理,服务端挂掉就做不了版本管理,代码合并
git:分布式管理,服务端挂掉,本地还可以继续做版本管理,代码合并
1.1 git,gitee,github,gitlab
# git
版本管理软件,装在操作系统上,有很多命令
# gitee
远程仓库:开源代码,私有代码,有个网站,可以看到有哪些开源代码,通过网站做一些配置
-国内最大的开源远程仓库
-小公司--->使用gitee的私有仓库
# github
远程仓库:开源代码,私有代码,有个网站,可以看到有哪些开源代码,通过网站做一些配置
-国际上最大的开源远程仓库
# bitbucket:只有私有仓库
-远程代码仓库
# gitlab
公司内部的远程仓库
2 git使用流程
2.1 git软件安装
# 双击 安装软件,一路下一步安装完成
-任意路径下右键,多出两个东西
-cmd:git 有反应
6.2 git工作流程
# 三个区
-工作区 存放文件的地方
-暂存区 工作区的变更,提交到暂存区
-版本库 暂存区的内容,提交到版本库
# 三个区互相操作
-下面学的命令,就是在操作这三个区
7 git常用命令
# 1 文件夹想被 git管理,文件夹作为仓库
# 先来到某个文件夹下敲
git init
# 初始化仓库,当前文件夹多出 .git文件 这个文件夹不要删,如果删除,这就不是git仓库了,之前的版本再也找不回来了,也不能被git管理
git init xxx # 在上一级敲
# 2 查看文件变化 在 .git所在文件夹下 [只看暂存区和工作区]
git status
# 看到有两种颜色
-红色:工作区变化了,但是没有提交到暂存区
-绿色:已经提交到暂存区,没有提交到版本库
-没有:所有东西都在版本库中了[所有文件都被git管理起来了]
# 3 把工作区变更提交到暂存区
git add 文件夹
git add. # 当前路径下所有变更都提交
# 4 把暂存区所有内容,提交到版本库作为一个版本
git commit -m '提交了1.txt'
# 5 设置作者(全局,局部)
# 全局的意思是当前操作系统下所有仓库,提交到版本库时,都用这个作者
git config --global user.email "445159292@qq.com"
# 局部只针对于当前仓库
git config --global user.name "superxz"
设置完之后再执行命令即可
# 6 查看版本库版本信息
git log
git reflog # 更精简一些
------了解-------
# 7 把工作区的变更,回退 [还没放到暂存区]
增加的内容,删除
git checkout .
# 8 把暂存区,拉回到工作区[由绿变红]
git reset HEAD
# 9 回到某个版本
只要被版本管理了,可以回退到任意版本
git reset --hard 版本号
# 总结:
记住的:
git add
git commit -m
git reset --hard 版本号
会用:
git init
git status
git log
git reflog
了解:
git checkout .
git reset HEAD
git config --global user.email "445159292@qq.com"
"""
1)有红色信息(工作区有内容),就执行 add
2)全绿信息(内容全部在暂存区),才执行 commit
3)只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本
空文件夹不会被git记录
"""
8 git忽略文件
# 咱们项目中,有些文件,或文件夹不想被git管理
-比如
-node_models
-.idea
-xx.pyc # python 的编译文件
# 使用步骤
-1 在仓库目录下 .git 所在目录下 新建 .gitignore
-2 在里面写忽略文件
node_models
.idea
*.pyc
*.log
-3 写的就会被忽略
-4 已经被管理过的不会被忽略
# 忽略文件写法
文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
/文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤
例如:
a.txt:项目中所有a.txt文件和文件夹都会被过滤
/a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
/b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
*x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
1 git 多分支
# 为什么要有分支
-可以保证,主分支的版本都是可以查看的版本
-我们都在开发分支开发,开发完成,合并到主分支
1.1 分支操作
分支查看
git branch
分支创建
git branch 分支名
git branch dev
分支切换
git checkout dev # 切换到dev分支
分支删除
git branch -d 分支名
1.2 合并分支(重要)
# 把dev合并进master
-先来到master分支:git checkout master
-执行合并命令:git merge dev # 把dev合并到master身上
# 分支合并可能会出冲突
# 公司里分支方案:小公司
-master分支,dev分支,bug分支,所有人在dev分支开发,开发完成合并到主分支
-master分支,dev分支,bug分支,个人分支,个人在个人分支上开发,开发完成合并到dev分支
2 git远程仓库
# 把本地的版本提交到远程仓库
# gitee,github,gitlab。。。
# gitlab的搭建过程:https://zhuanlan.zhihu.com/p/413217715
以 gitee作为远程仓库
# luffy_api 写好了一部分功能,要把代码提交到远程仓库
2.1 操作步骤
本地:
1 在luffy_api 敲git init
2 设置忽略文件 (.gitignore)
3 git add.
4 git commit -m '第一次提交'
提交到了本地版本库-------被版本管理了
忘记写忽略文件提交,如何再重写忽略文件步骤
luffy.log---->暂存区---->版本库
.gitignore---->写上忽略,但是不好被忽略,只要luffy.log有变化还是会被监控到
删除luffy.log---->会被监控到---->add,commit---->版本库中已经没有luffy.log
再出的luffy.log,就不会被管理了
gitee远程仓库
远程:
1 远程要创建仓库:gitee上创建仓库,右上角 +
2 填一些信息,保证仓库是空的
本地传远程
1 按照远程仓库的提示的步骤操作
2 设置用户和邮箱
3 咱们是已有仓库
# 添加一个远程仓库地址名字叫origin,地址是...
git remote add origin https://gitee.com/super-xiao-zhao/luffy_api.git
# 把本地的版本库推送到远程仓库
# 把本地当前所在分支,推送到 origin对应的远程的master上
git push -u origin "master"
# 需要输入用户名密码,输入一次,以后就不用输入了(本地保存了:凭据管理)
3 ssh方式连接远程仓库
# 刚刚提交代码---》输入了用户名密码---》才可以提交上去----》使用的是https的协议提交的代码
-它需要输入用户名密码
# 咱们要使用ssh方案:需要公钥和私钥 ---》公司里这种方式多
-私钥在本地保存
-公钥配置到gitee上
-以后再提交代码,不需要其他任何认证了,一路绿灯
使用步骤
生成公钥私钥的详细步骤:https://gitee.com/help/articles/4181
-在命令窗口执行,一路回车
ssh-keygen -t ed25519 -C "445159292@qq.com"
-生成在:C:\Users\Super小赵/.ssh 两个文件 一个公钥 一个私钥
-把公钥,配置在gitee上
-之前origin对应的地址是 https的,现在要使用ssh提交代码,需要把它删除,再增加成ssh的协议
# 删除远程仓库
git remote remove origin
# 再次提交
git remote add origin git@gitee.com:super-xiao-zhao/luffy_api.git
4 协同开发
# 我[仓库管理员]创建了仓库,我对仓库有各种权限
# 我们要多人开发(张三,李四),张三李四在自己的仓库中,能看到我的项目吗?看不到
# 我[仓库管理员],把张三李四设置为该仓库的开发者,设置完成后,在张三李四的仓库中就能看到这个项目了
# 仓库管理员,邀请开发者进入
邀请的开发者,对这个仓库就有读写权限,他们就可以开发代码,提交
# 我作为开发者,本地没有代码
1 把代码从远程仓库 clone 下来
git clone git@gitee.com:super-xiao-zhao/luffy_api.git
2 使用pycharm打开,配置好解释器,安装依赖
3 开发代码,开发完
git add
# 设置用户名和邮箱
git config user.name lqz
git config user.email 3@qq.com
git commit -m '注释'
git push origin master
# 你刚去公司,你的步骤
1 自己注册,hr给你 gitlab 账号和密码
-自己去你的账号里,配置ssh
2 老大会把一个仓库地址给你 【它已经把你加成开发者了】 https ssh
3 clone下来代码
4 使用pycharnm打开,配置环境===》代码运行起来
5 开发代码,本地提交---》push到远端
add
commit
push
5 冲突解决
# 出现冲突的原因
1 多人在同一分支开发
2 分之合并出现冲突
# 多人在同一分支开发冲突
-张三:
git pull origin master
在requirements.txt,最后一行加入 lqz
git add .
git commit -m
git push origin master
-我:
在requirements.txt,最后一行加入 lqz
git add .
git commit -m
git pull origin master
# 冲突了
# 解决冲突 冲突的 箭头去掉,阅读代码,选择保留或删除别人或自己的代码,再提交
# 提交到远程仓库,这是解决后的
# 冲突出现的样子:你如果要删除别人的代码,你需要跟别人说一声
<<<<<<< HEAD 我的代码
print('刘亦菲')
======= 它的代码
print('彭于晏')
>>>>>>> 6f720edbd84c8744b1c7c10767fb89a5d0fa98f5
避免出现冲突
你如果想少出现冲突,勤拉取代码
冲突出现的原因2,分支合并出冲突
-我:
1 创建dev分支
git branch dev
2 在dev分支的views.py 中第2行加入代码
3 提交到本地仓库
-我:
1 在主分支的views.py 中第2行加入代码
2 提交到版本库
3 在主分支合并代码 git merge dev
4 冲突了,解决冲突
5 再提交代码,到此结束
6 线上分支合并
# 线下分支合并
git merge dev
# 线上 分支合并
- gitee上,新建一个分支
-本地同步远程dev分支
git pull origin dev
# 拉下来了,但是看不到,只有切过去,才看得到
git checkout dev
-在dev上开发代码
随便加代码
git add .
git commit -m '操作的注释'
# 提交到了本地的dev
-推到远端 dev
git push origin dev
-但主分支master中没有修改的代码,dev中有提交的,现在要进行线上分支合并
-把远程的dev合并进远程的master
- 提交pr 提交rr
-在网站上,申请提交pull request
-领导审核,测试,通过后,点击合并
-线上dev就合并进线上的master了
7 远程仓库回滚
# 你不要用
# 想远程的代码,是最初的状态
# 步骤:
1 本地版本回退
git reset --hard 版本号
2 强行推到远端
git push origin master -f
标签:git,仓库,代码,dev,提交,使用,分支
From: https://www.cnblogs.com/super-xz/p/17326386.html