【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,一边开发新功能,最终合并。

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第1张图片

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 fix
  master 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 test02
  master 49efe51 bug fix
# 切换回master,新类不见了
git checkout master
# 切换回dev,新类又出现了,从.git文件中恢复
git checkout dev
# 功能汇总,以master为主
git checkout master
git merge dev
# 版本一致
$ git branch -v
  dev    38444da new test02
* master 38444da new test02

3 版本冲突

(1)冲突产生

新功能继续开发,但开发中途主干修复了bug,新功能也需要使用修复好的主干,这时就要以分支为主

注意bug修复之后与新功能之间是否存在冲突

也需要注意分支上和主干上同时进行了bug的修复,但修复的方式不一样,无论是主干与分支合并,还是分支与主干合并,最终合并的版本会出现同一段代码出现了两种写法,保留哪个,git很难去判断,需要程序员来手工判断解决冲突。

(2)合并时冲突

程序合并时发生冲突系统会提示CONFLICT关键字,命令行后缀会进入MERGING状态,表示此时是解决冲突的状态。

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第2张图片

(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 B
  master 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

创建如下目录

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第3张图片

在src目录下打开Git

vim src/jiuyinzhenjing.java
# 添加一些内容
git init
git config user.name "xiaolongnv"
git config user.email "[email protected]"
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】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第4张图片

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 协作冲突

在上传或同步代码时,由于你和他人都改了同一文件的同一位置的代码,版本管理软件无法判断究竟以谁为准,就会报告冲突,需要程序员手工解决。

先提交的成功,后提交的失败。

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第5张图片

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,然后,选择合并或拒绝。

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第6张图片

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很多特性并没有用到。

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第7张图片

2 GitFlow工作流

Gitflow工作流通过为功能开发、发布准备和维护设立了独立的分支,让发布迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。

(1)简单的分支

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第8张图片

master分支上的版本几乎和上线的版本保持一致,平时的开发使用develop分支。

(2)复杂的分支

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第9张图片

分支种类

  • 主干分支 master:主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境完全一致。
  • 开发分支 develop:主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。
  • bug修理分支 hotfix:要负责管理生产环境下出现的紧急修复的代码。 从主干分支分出,修理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。
  • 发布版本分支 release:较大的版本上线前,会从开发分支中分出发布版本分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后可以视情况删除。
  • 功能分支 feature:为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支中独立出来。开发完成后会合并到开发分支。

五 在idea中配置Git

1 提交到本地库

设置idea中Git客户端的路径

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第10张图片

点击【test】,出现Git版本号说明路径没有问题

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第11张图片

创建maven项目,随便编写一点内容

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第12张图片

创建本地仓库

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第13张图片

选择本项目,点击创建,创建成功之后,会发现有一些文件变为红色

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第14张图片

点击【add】,add之后向添加其他文件可以再次右键点击【commit file】,选择其他想要添加的文件

把选中的代码纳入暂存区,并提交本地库。(git add, commit)。

这里的文件要选你自己编写的代码比如java文件,pom.xml,properties文件等等。

idea自动生成的文件一般不要上传,如.idea目录。

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第15张图片

下框中填写版本的说明,右上角填写签名,最后点击commit

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第16张图片

完成之后,已经纳入版本管理的文件会变为黑色

2 提交到远端

登录gitee,新建库

点击push

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第17张图片

填写远端路径
【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第18张图片

输入用户名密码,选中文件,push

提示push成功,可以在gitee查看到上传到的文件

3 下载远端库

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第19张图片

填写远端地址
【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第20张图片

点击克隆即可将代码下载到本地,此时可以随意修改代码,创建类

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第21张图片

点击取消,上传时统一上传,不使用自动上传,修完完代码之后,上传步骤如上

在Gitee仓库管理中添加用户权限,pull到远端,如上

将代码的修改还原 – 同checkout
【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第22张图片

六 分支实战

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第23张图片

1 开发新功能

在开发新功能前,先建立分支

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第24张图片

创建完成之后,默认操作会直接切换到分支上,可以进行代码编写

提交代码,并push到远端

之后可以在gitee上看到新的分支被上传

2 pull分支

点击pull,先刷新一下,会看到新的分支

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第25张图片

右下角点击分支名可以看到有新的远端分支,如果没有,右键 – 【Git】-- 【repository】 – 【fetch】

但是,远端分支[Remote Branches]只是一个链接,并没有下载到本地,需要用【checkout as new local branch】 将分支下载到本地仓库。

下载到本地后可以看到新的本地分支

3 合并分支

如果该分支的代码没有问题,可以进行一次合并。

以合并到master分支为例。

首先要切到master上

【Git】Git分支、与gitee平台对接、Fork、Git工作流、在idea中配置Git、分支实战_第26张图片

在主干master分支上选择要合并的分支进行Merge – 【merge into current】

最后把经过合并的master,push到远端即完成了一个功能在主干上的提交。

你可能感兴趣的:(Git,git,intellij-idea,java)