【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战
文章目录
- 一 分支
- 1 分支原理
- 2 分支实操
- 3 版本冲突
- (1)冲突产生
- (2)合并时冲突
- (3)解决合并时冲突
- 二 与平台对接
- 1 对接流程
- 2 实战演练
- (1)push
- (2)clone
- (3)pull
- 3 协作冲突
- 三 Fork
- 1 Fork概念
- 2 工作流程
- 3 演示Fork
- 四 Git工作流
- 1 集中式工作流
- 2 GitFlow工作流
- (1)简单的分支
- (2)复杂的分支
- 五 在idea中配置Git
- 1 提交到本地库
- 2 提交到远端
- 3 下载远端库
- 六 分支实战
- 1 开发新功能
- 2 pull分支
- 3 合并分支
一 分支
1 分支原理
系统上线后,又要修改bug,又要开发新的功能。
由于新功能没有开发完,所以需要建立分支,一边修改bug,一边开发新功能,最终合并。
2 分支实操
# 查看分支
git branch -v
# 输出内容
* master 49efe51 bug fix
# 添加分支
git branch -v
# 输出内容dev 49efe51 bug fix
* master 49efe51 bug fix
# 切换分支
git checkout dev
# 输出内容
* dev 49efe51 bug fixmaster 49efe51 bug fix
# 在dev分支新建一个类
touch src/java_test01.java
git add src/java_test01.java
git commit -m "new test02"
# 可以看到两个分支的版本不一致了
git branch -v
* dev 38444da new test02master 49efe51 bug fix
# 切换回master,新类不见了
git checkout master
# 切换回dev,新类又出现了,从.git文件中恢复
git checkout dev
# 功能汇总,以master为主
git checkout master
git merge dev
# 版本一致
$ git branch -vdev 38444da new test02
* master 38444da new test02
3 版本冲突
(1)冲突产生
新功能继续开发,但开发中途主干修复了bug,新功能也需要使用修复好的主干,这时就要以分支为主
注意bug修复之后与新功能之间是否存在冲突
也需要注意分支上和主干上同时进行了bug的修复,但修复的方式不一样,无论是主干与分支合并,还是分支与主干合并,最终合并的版本会出现同一段代码出现了两种写法,保留哪个,git很难去判断,需要程序员来手工判断解决冲突。
(2)合并时冲突
程序合并时发生冲突系统会提示CONFLICT关键字,命令行后缀会进入MERGING状态,表示此时是解决冲突的状态。
(3)解决合并时冲突
此时通过git diff 可以找到发生冲突的文件及冲突的内容。
然后修改冲突文件的内容,再次git add 和git commit 提交后,后缀MERGING消失,说明冲突解决完成。
新建分支,切换分支:git checkout -b <分支名>
修改文件内容,并添加,提交:(同时修改第x行)
切换主分支:修改文件内容,并添加,提交:(同时修改第x行)
当把其他分支合并到主分支时出现冲突:
# 制造冲突
vim src/java_test.java
# 添加一行A
git add src/java_test.java
git commit -m "insert A"
# 切换分支
git checkout dev
vim src/java_test.java
git commit -m "insert B"
# 此时两分支彼此独立,不会产生问题
git branch -v
* dev 56bc207 insert Bmaster 7434eb8 insert A
# 合并
git merge master
# 产生提示
Auto-merging src/java_test.java
CONFLICT (content): Merge conflict in src/java_test.java
Automatic merge failed; fix conflicts and then commit the result.
# (dev|MERGING) 状态表示,合并中,没有合并完成,没完成之间,其他工作做不了
# 解决冲突,手动合并
<<<<<<< HEAD
BBBBBBBBBBBBBBBBBB
=======
AAAAAAAAAAAAAAAAAA
>>>>>>> master
# HEAD表示本地代码,======表示其他分支代码
# 将标签删除,冲突就解决了,但保留哪一个或者是两段代码是否合并,需要人为判断
# 将合并后的新代码再次提交
vim src/java_test.java
git add src/java_test.java
git commit -m "Merge branch 'master' into dev"
# 此时状态变为(dev)
git branch -v
二 与平台对接
1 对接流程
各个机构,各个人如何结合网络平台(github、gitee、gitlab)完成一个项目
负责人需要完成
- 搭建本地库:在本地库Git中需要有代码(git init – git config)
- 提交代码:一些配置文件、工具类、项目的命名、目录结构等(git add XXX – git commit)
- 网络平台准备工作:注册账号,在网络平台搭建空白项目
- 推送代码到远端(git remote add origin – git push origin master)
- 负责人通过邮件等方式将项目地址发送给组员
组员需要完成
- 将代码从网络平台克隆下来(git clone ),可以获得两个文件
- .git仓库
- 最新的代码可以在本地看到,HEAD指针指向的代码
- 再将修改后的代码上传到本地库git(git add XXX – git commit)
- 本地库没有问题,再推送到远端(git push)
负责人再执行更新操作(git pull),按照上述过程,循环
核心的三个动词:push、clone、pull
2 实战演练
(1)push
创建如下目录
在src目录下打开Git
vim src/jiuyinzhenjing.java
# 添加一些内容
git init
git config user.name "xiaolongnv"
git config user.email "xiaolongnv@126.com"
git add src/jiuyinzhenjing.java
git commit -m "create shenfa"
# 查看
Git log
注册一个gitee账号
点击新建仓库,完成后会生成一个仓库地址:https://gitee.com/xiaolongnv13597/shenfa.git
# 将代码上传到仓库
# 给仓库地址起别名 origin
git remote add origin https://gitee.com/xiaolongnv13597/shenfa.git
# 将master分支推到origin
git push origin master
# 输入账户名密码
# 显示结果
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Writing objects: 100% (4/4), 268 bytes | 268.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/xiaolongnv13597/shenfa.git* [new branch] master -> master# 可在gitee仓库中查找到上传的文件
(2)clone
进入到如下目录
git clone https://gitee.com/xiaolongnv13597/shenfa.git shenfa_guoer
之后yangguo可以进行自己的开发
# yangguo修改文件
vim src/jiuyinzhenjing.java
git add src/jiuyinzhenjing.java
git commit -m "togeter"
想要上传文件,需要在gitee给上传用户的权限
在项目下点击右上角的【管理】–【仓库成员管理】–【开发者】–【添加仓库成员】–【邀请用户】
登录yangguo用户,会收到邀请,点击确认加入
开发者拥有提交代码的权限
git push https://gitee.com/xiaolongnv13597/shenfa.git master
(3)pull
xiaolongnv将更新数据pull下来
git pull https://gitee.com/xiaolongnv13597/shenfa.git master
# 查看
cat src/jiuyinzhenjing.java
3 协作冲突
在上传或同步代码时,由于你和他人都改了同一文件的同一位置的代码,版本管理软件无法判断究竟以谁为准,就会报告冲突,需要程序员手工解决。
先提交的成功,后提交的失败。
xiaolongnv修改并提交到远端,OK。
yangguo修改并提交到远端,NOT OK,此时出现在push前请先pull。
yangguo先pull,此时出现冲突,合并冲突,commit到本地,再push,OK。
三 Fork
1 Fork概念
现在的情景是,用叉子把别人的东西(copy no cut)叉到你碗里~
就是把别人的项目clone一份,但是owner变成自己,这样你就可以在遵守Open source license的前提下任意修改这个项目了。
相当于你在原项目的主分支上又建立了一个分支,你可以在该分支上任意修改,如果想将你的修改合并到原项目中时,可以pull request,简称PR。
这样原项目的作者就可以将你修改的东西合并到原项目的主分支上去,这样你就为开源项目贡献了代码,开源项目就会在大家共同的努力下不断壮大和完善。
2 工作流程
第三方账号登录,搜索某账号找到某项目,然后点击Fork按钮,这样就将该项目克隆一份到当前账号内,然后进行修改,提交pull request,告诉对方已经修改了,请求合并;
当前用户登录后,可以看到小铃铛中的消息提醒,查看到pull request,然后,选择合并或拒绝。
3 演示Fork
【fengqigong】获取【xiaolongnv]的项目URL(可以进行搜索,也可以通过email发送url地址告知)
【fengqigong】点击【Fork】,产生分支
【fengqigong】修改项目文件。(可以pull后修改提交,也可以在gitee上直接进行修改)
【fengqigong】-> [New pull request] -> 点击【代码】 -> + pull request -> 填写一封邮件,说明自己的改动情况 – 点击创建
分支已提交到主分支
【xiaolongnv】和【yangguo】都可以看到【fengqigong】提交的项目内容 – pull requests
点击【审查通过】,点击【测试通过】,最后点击【合并】
四 Git工作流
简单来说就是,Git工作流就是,一个项目的成员们在工作中统一使用Git的工作方式。
1 集中式工作流
像SVN一样,集中式工作流以中央仓库作为项目所有修改的单点实体。所有修改都提交到Master这个分支上。
这种方式与SVN的主要区别就是开发人员有本地库。Git很多特性并没有用到。
2 GitFlow工作流
Gitflow工作流通过为功能开发、发布准备和维护设立了独立的分支,让发布迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。
(1)简单的分支
master分支上的版本几乎和上线的版本保持一致,平时的开发使用develop分支。
(2)复杂的分支
分支种类
- 主干分支 master:主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境完全一致。
- 开发分支 develop:主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。
- bug修理分支 hotfix:要负责管理生产环境下出现的紧急修复的代码。 从主干分支分出,修理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。
- 发布版本分支 release:较大的版本上线前,会从开发分支中分出发布版本分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后可以视情况删除。
- 功能分支 feature:为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支中独立出来。开发完成后会合并到开发分支。
五 在idea中配置Git
1 提交到本地库
设置idea中Git客户端的路径
点击【test】,出现Git版本号说明路径没有问题
创建maven项目,随便编写一点内容
创建本地仓库
选择本项目,点击创建,创建成功之后,会发现有一些文件变为红色
点击【add】,add之后向添加其他文件可以再次右键点击【commit file】,选择其他想要添加的文件
把选中的代码纳入暂存区,并提交本地库。(git add, commit)。
这里的文件要选你自己编写的代码比如java文件,pom.xml,properties文件等等。
idea自动生成的文件一般不要上传,如.idea目录。
下框中填写版本的说明,右上角填写签名,最后点击commit
完成之后,已经纳入版本管理的文件会变为黑色
2 提交到远端
登录gitee,新建库
点击push
填写远端路径
输入用户名密码,选中文件,push
提示push成功,可以在gitee查看到上传到的文件
3 下载远端库
填写远端地址
点击克隆即可将代码下载到本地,此时可以随意修改代码,创建类
点击取消,上传时统一上传,不使用自动上传,修完完代码之后,上传步骤如上
在Gitee仓库管理中添加用户权限,pull到远端,如上
将代码的修改还原 – 同checkout
六 分支实战
1 开发新功能
在开发新功能前,先建立分支
创建完成之后,默认操作会直接切换到分支上,可以进行代码编写
提交代码,并push到远端
之后可以在gitee上看到新的分支被上传
2 pull分支
点击pull,先刷新一下,会看到新的分支
右下角点击分支名可以看到有新的远端分支,如果没有,右键 – 【Git】-- 【repository】 – 【fetch】
但是,远端分支[Remote Branches]只是一个链接,并没有下载到本地,需要用【checkout as new local branch】 将分支下载到本地仓库。
下载到本地后可以看到新的本地分支
3 合并分支
如果该分支的代码没有问题,可以进行一次合并。
以合并到master分支为例。
首先要切到master上
在主干master分支上选择要合并的分支进行Merge – 【merge into current】
最后把经过合并的master,push到远端即完成了一个功能在主干上的提交。
【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战相关推荐
- 在IDEA中配置git本地仓库并提交远程仓库
首先需要先安装好git 1.下载并安装Git客户端→Git官网下载地址 2.需要有远程仓库账号(gitee或者GitHub都可以). 先在IDEA中配置git file -> settings ...
- IDEA 中配置GIT环境
第五章 IDEA 中配置GIT环境 文章目录 第五章 IDEA 中配置GIT环境 前言 一.配置GIT忽略文件 二.IDEA中配置GIT 三.在项目中配置GIT 四.开始使用在IDEA中GIT 五.I ...
- 在IDEA中配置Git
文章目录 在IDEA中配置Git 开发中IDEA的Git常见操作 初始化并提交项目到远程仓库 [项目leader] 1. 在GitHub中创建远程仓库 2. 将maven工程交给Git管理 3. 配置 ...
- 在Mac IntelliJ IDEA中配置Git
访问:git官网:https://git-scm.com/下载符合当前系统的安装包,下载后进行安装. 在IntelliJ IDEA中配置Git 菜单栏顺序选择: IntelliJ IDEA->P ...
- 新手上路!如何在idea中配置git
git是是一个免费的.开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种 项目.因为其迷你.便捷.易上手的特性,其在企业和开源项目中得到了大量的使用,可以说是开发人员必备的技能之一.在id ...
- vscode暂存的代码保存在哪里_在vs code中配置git,便于代码的保存
用了git最方便的就是比如在公司写了很多代码后回到家打开vscode只需要点击一下pull就能全部同步过来.是不是很方便....毕竟之前我都是拿u盘拷贝回家或者存到云盘再下载下来.. 我这里用的是国内 ...
- VSCode中配置git(参数设置) - 教程篇【不推荐阅读】
VSCode中git的配置 [不推荐阅读] 原因:可以通过git clone规避配置不成功问题. 具体查看相关文章:VSCode + git 代码托管[当前没有源代码管理提供程序注册](没有'+'加法 ...
- 06-07 Jenkins中配置 Git 认证信息
参考链接: https://ceshiren.com/t/topic/10784 需要在节点设备上配置好公钥 生成/添加 SSH 公钥 的方式 https://gitee.com/help/artic ...
- VsCode中配置git
个人资源与分享网站:http://xiaocaoshare.com/ 1.首先安装git 2.打开vsCode,选择文件->首选项->设置 在搜索栏输入git.path 打开后输入本地gi ...
最新文章
- 独家 | 手把手教你用Python 3创建用于机器学习开发的Linux虚拟机(附安装教程代码)
- Oracle 10g新增DROP DATABASE命令
- OpenCV在Linux下的编译安装(Ubuntu )
- cs6 数据库mysql_能mysql内容
- python表白-教你如何用Python表白
- 贝聊运维自动化体系演化
- cf1523C. Compression and Expansion
- 4562亿元教育经费收从哪里花向何处
- SpringBoot基础篇(一):Spring Boot入门
- sklearn中的逻辑回归
- sublime text 3中安装ctags支持函数跳转,安装convertToUtf8支持中文步骤[工具篇]
- 修改刷新没反应_【原神】全特产高效率采集线路和刷新时间
- 用matlab做数据挖掘,matlab实现数据挖掘
- 单片机技术应用实训装置
- office如何从非第一页开始插入页码
- Kalilinux2017.2安装搜狗拼音输入法
- 今日份安利:发票扫描识别软件推荐
- python统计中文字符_使用 Python 统计中文字符的数量
- kafka2.8抛弃zookeeper?
- ”真相是否只有一个?”麻省理工学院带你数据可视化分析假新闻
热门文章
- Construct2:自制简易超级玛丽射击游戏
- UE4打包后视频或者其他资源未打包进去
- 如何训练大脑,保持专注的三种技巧
- 微软用翻译软件制作Windows中文版?
- sed: -e expression #1, char 8: unterminated `s‘ command
- 【Effective Objective-C】——熟悉Objective-C
- 春节将近,给大家分享一个抢高铁票抢票教程
- ftp 服务部署及ftp 权限设置
- 研电赛期间使用极链Ai云的良好体验。
- Java输入年份和第一天的星期,展示全年日历