Git工作流实战-超级干货(3)

Git工作流实战-超级干货(3)

工作流实战

1、常见案例

基本功能

张三、李四克隆代码

张三克隆远程仓库代码
git clone ssh://git@192.168.125.9/srv/oa-parent.git
李四克隆远程仓库代码
git clone ssh://git@192.168.125.9/srv/oa-parent.git

张三、李四修改代码

张三拉取分支 feature/001

git checkout -b feature/001 
此时本地 HEAD -> feature/001 
开发新功能并提交代码到本地仓库 
git add --all git commit -m 'add log print for unauthorize method' 
开发新功能并提交代码到本地仓库 
git add --all git commit -m 'add log print for findById method'

李四拉取分支 feature/002

git checkout -b feature/002 
此时本地 HEAD -> feature/002 
开发新功能并提交代码到本地仓库 
git add --all git commit -m 'add one line for App.java'

张三紧急修改代码

张三拉取分支 bugfix/001

git checkout master 
git checkout -b bugfix/001 
修复 bug 并提交代码到本地仓库 
git add --all git commit -m 'fix bug'

张三将分支 bugfix/001 合并到分支 master

git checkout master 
git merge bugfix/001 
git branch -d bugfix/001 
这次合并属于快进合并 
Updating 89362c4..767e64f 
Fast-forward

张三继续修改代码

张三修改分支 feature/001 代码

git checkout feature/001 
开发新功能并提交代码到本地仓库 
git add --all 
git commit -m 'add one line for App.java'

张三将分支 feature/001 合并到分支 master

git checkout master 
git merge feature/001:合并 feature/001 分支到 master 分支 
git branch -d feature/001 
这次合并属于递归三路合并 
Merge made by the 'recursive' strategy.

李四提交代码

李四将分支 feature/002 合并到分支 master
git checkout master 
git merge feature/002 
git branch -d feature/002

张三、李四推送代码到远程分支

张三推送本地仓库代码到远程仓库

本地的 master 和远程分支 origin/master 是关联起来的,origin/master 就对应着远程仓库的 master分支

git push origin master 
查看远程仓库的提交历史 
cd /srv/oa-parent.git/ 
git log
李四推送本地仓库代码到远程仓库

(1)推送代码

git push origin master

(2)推送结果

因为张三刚才已经推送了代码到远程仓库的 master 分支,所以李四需要先拉取远程仓库的最新提交,再去执行推送

PanHao@DESKTOP-1K16GB0 MINGW64 /e/doc/GitTest/lisi/oa-parent (master) 
$ git push origin master 
To ssh://192.168.125.9/srv/oa-parent.git 
! [rejected] master -> master (fetch first)
 error: failed to push some refs to 'ssh://192.168.125.9/srv/oa-parent.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.

(3)拉取远程仓库

拉取操作主要做两件事:将远程仓库的提交历史和本地仓库的提交历史进行合并、将本地仓库 master分支对应的 commit 和远程仓库的 master 分支对应的commit 进行合并

git pull

(4)拉取远程仓库结果

PanHao@DESKTOP-1K16GB0 MINGW64 /e/doc/GitTest/lisi/oa-parent (master) 
$ git pull remote: Counting objects: 76, done. 
remote: Compressing objects: 100% (44/44), done. 
remote: Total 64 (delta 16), reused 0 (delta 0) 
Unpacking objects: 100% (64/64), 4.39 KiB | 23.00 KiB/s, done. 
From ssh://192.168.125.9/srv/oa-parent 
	89362c4..3df45b2 master -> origin/master 
Merge made by the 'recursive' strategy. 
.../java/com/zhss/oa/auth/service/impl/AuthorizationServiceImpl.java | 5 
++++- 
.../src/main/java/com/zhss/oa/auth/service/impl/TestServiceImpl.java | 2 +- 
2 files changed, 5 insertions(+), 2 deletions(-)

(5)再次推送代码

git push origin master

张三拉取代码

git pull

合并冲突

张三修改一行代码

git add --all 
git commit -m 'modify one line for App.java by lisi' 
git push origin master

李四修改同一行代码

git add --all 
git commit -m 'modify one line for App.java by lisi' 
git push origin master

张三推送代码报错

PanHao@DESKTOP-1K16GB0 MINGW64 /e/doc/GitTest/lisi/oa-parent (master) 
$ git push origin master 
To ssh://192.168.125.9/srv/oa-parent.git ! 
[rejected]  	master -> master (fetch first) 
error: failed to push some refs to 'ssh://192.168.125.9/srv/oa-parent.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.

李四解决合并冲突

拉取代码

PanHao@DESKTOP-1K16GB0 MINGW64 /e/doc/GitTest/lisi/oa-parent (master) 
$ git pull remote: Counting objects: 19, done. 
remote: Compressing objects: 100% (6/6), done. 
remote: Total 10 (delta 2), reused 0 (delta 0) 
Unpacking objects: 100% (10/10), 693 bytes | 23.00 KiB/s, done. 
From ssh://192.168.125.9/srv/oa-parent b94cf23..da03380 master -> origin/master Auto-merging oa-doc/src/main/java/com/zhss/oa/App.java 
CONFLICT (content): Merge conflict in oa- 
doc/src/main/java/com/zhss/oa/App.java 
Automatic merge failed; fix conflicts and then commit the result.

解决冲突

<<<<<<< HEAD 
	System.out.println( "I'am Lisi, hello world......" ); 
======= 
	System.out.println( "I'am Zhangsan, haha......" ); 
>>>>>>> da033806d379a11d2f62566362a01946fc6ca7f5 12345

提交并推送代码

git add --all 
git commit -m 'fix confflict with zhangsan' 
git push origin master

面向极小项目的2人小团队集中式工作流实战

代码实战

张三、李四修改 master 分支的同一行代码

git add --all 
git commit -m 'modify App.java by zhangsan' 
git push origin master 

git add --all 
git commit -m 'modify App.java by lisi' 
git push origin master

李四推送代码失败处理

解决冲突


<<<<<<< HEAD 
	System.out.println( "Hello World! lisi......" ); 
======= 
	System.out.println( "Hello World! zhangsan......" );
>>>>>>> bb86c186ee06ed16ddc2344df130330a0c31ebbe 
	System.out.println( "I'am Lisi, hello world......" ); 	
	System.out.println("I'm zhangsan......");
	

重新推送

git add --all 
git commit -m 'fix conflict by lisi' 
git push origin master

画图实战

新建项目

(1)GitLab 新建 demo1 项目
(2)张三本地初始化

cd /e/doc/IdeaProjects/GitTest/zhangsan 
mkdir demo1 
cd demo1 
git init 
git remote add origin http://192.168.125.6/OA/demo1.git 
touch test1.txt 
touch test2.txt

(3)李四本地初始化

/e/doc/IdeaProjects/GitTest/lisi 
mkdir demo1

面向版本稳定迭代项目的中小型团队的 GitFlow 工作流实战

  1. 张三新建 develop 分支
git checkout master 
// 本地仓库基于 master 分支新建了一个 develop 分支 
git checkout -b develop 
// 远程仓库新建 develop 分支,并将本地仓库 develop 分支与远程仓库 develop 分支关联起来 
git push -u origin develop 
// 查看本地分支和远程分支的对应关系 
git branch -vv
  1. GitLab 新建 feature 分支
    (1)GitLab 新建分支
    GitLab 上基于 develop 分支新建 feature/001 分支和 feature/002 分支
    (2)张三本地新建 feature/001 分支
// 获取远程仓库所有的分支 
git fetch origin 
// 本地仓库新建 feature/001 分支 
git checkout -b feature/001 origin/feature/001 
git branch -vv

(3)李四本地新增 feature/002 分支

// 获取远程仓库所有的分支 
git fetch origin 
// 本地仓库新建 
develop 分支 git checkout -b develop origin/develop 
// 本地仓库新建 feature/002 分支 
git checkout -b feature/002 origin/feature/002 
git branch -vv
  1. 张三、李四基于 feature 分支修改代码
    (1)张三修改 feature/001 分支代码
git add --all 
git commit -m 'finish feature/001' 
git push origin feature/001

(2)李四修改 feature/002 分支代码

git add --all 
git commit -m 'finish feature/002' 
git push origin feature/002
  1. feature 分支合并到 develop 分支
    (1)张三发起合并请求:从 feature/001 分支合并到 develop 分支
    (2)李四发起合并请求:从 feature/002 分支合并到 develop 分支

  2. 张三、李四删除 feature 分支
    (1)张三删除 feature/001 分支

git checkout master 
git branch -d feature/001 
git push origin --delete feature/001

(2)李四删除 feature/002 分支

git checkout master 
git branch -d feature/002 
git push origin --delete feature/002
  1. 在 develop 分支上进行集成测试
  2. 新建 release 分支修复 bug
    (1)GitLab 新建分支
    GitLab 上基于 develop 分支新建 release/v1.0.0 分支
    (2)张三拉取 release/v1.0.0 分支并修改代码
git fetch origin 
git checkout -b release/v1.0.0 origin/release/v1.0.0 
git add --all 
git commit -m 'fix bug by zhangsan' 
git push origin release/v1.0.0

(3)李四拉取 release/v1.0.0 分支并修改代码

git fetch origin 
git checkout -b release/v1.0.0 origin/release/v1.0.0 
git pull 
git add --all 
git commit -m 'fix bug by lisi' 
git push origin master
  1. release 分支合并到 master 分支
    (1)发起合并请求
    从 release/v1.0.0 分支合并到 master 分支
    (2)删除 release 分支
git checkout master 
git branch -d release/v1.0.0 
git push origin --delete release/v1.0.0
  1. 新建标签
    (1)新建 master 分支标签
git pull 
git checkout master 
# 新建标签 
git tag -a v1.0.0 -m 'version 1.0.0' 
# 推送标签 
git push origin v1.0.0

(2)master 分支代码上线

  1. 张三修复 bug

(1)GitLab 新建分支
GitLab 上基于 master 分支新建 bugfix/001 分支
(2)张三修改代码

git fetch origin 
git checkout -b bugfix/001 origin/bugfix/001 
git add --all 
git push origin bugfix/01 
git commit -m 'fix bug in bugfix/001'
  1. bugfix/001 分支合并到 master 分支
    (1)发起合并请求
    从 bugfix/001 分支合并到 master 分支
    (2)master 分支代码上线

  2. bugfix/001 分支合并到 develop 分支
    (1)发起合并请求
    从 bugfix/001 分支合并到 develop 分支
    (2)删除 bugfix 分支

git checkout master 
git branch -d bugfix/001 
git push origin --delete bugfix/001
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100704.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 两地三中心是什么意思「建议收藏」

    两地三中心是什么意思「建议收藏」两地三中心随着IT应用的快速发展,金融,银行,政府等越来越多的用户要求核心业务7*24不断网,不断电持续运行,进而出现了两地三中心的方案,是一些大型企业因为大自然的灾害而在同城选择两个机房异地选择一个机房而组成的称两地三中心,这样的方案具备高可用和灾难备份能力。同城双机房指的是在同一个城市或相邻的城市建立两个相同的系统,双中心具备等同的业务处理能力并通过高速链路实时数据同步,日常情况下可同时分…

    2022年6月16日
    52
  • java io面试题_JavaIO流常见面试题

    java io面试题_JavaIO流常见面试题1.Java中有几种类型的流?字符流和字节流。字节流继承inputStream和OutputStream字符流继承自InputSteamReader和OutputStreamWriter总体结构图2.字节流和字符流哪个好?怎么选择?大多数情况下使用字节流会更好,因为大多数时候IO操作都是直接操作磁盘文件,所以这些流在传输时都是以字节的方式进行的(图片等都是按字节存储的)如果对于操作需要通过…

    2022年5月24日
    47
  • 解决oracle创建用户不能登录

    解决oracle创建用户不能登录//用system身份登录SQL&gt;createuserusernameidentifiedbyuserpwd;用户已创建SQL&gt;grantconnecttousername;授权成功。SQL&gt;connusername/userpwd;已连接。//此时新创建的用不能创建表的….若要创建的用户能够…

    2022年5月18日
    37
  • 呕心沥血整理的的嵌入式学习路线[通俗易懂]

    呕心沥血整理的的嵌入式学习路线[通俗易懂]曾经是某见的教学总监,我带出来的学生也有大几千了,基本都从事linux相关工作。网上看了很多的嵌入式学习路线,有的还凑活,有的纯粹是打广告卖板子,有的东拼西凑,简直是嵌入式劝退指南。大致给你梳理一下我从事的一个嵌入式的课程培训体系吧。基础1.linux基本操作:个人建议只要会一些基本的操作就行了,不需要太深入的学习每一个命令,用到的时候会去搜索就行了。需要掌握的知识如下:环境的搭建;Linux目录结构;文件类型;基本目录操作,文件操作,vim,ifconfig,ping,cd,cp,m

    2022年6月7日
    27
  • 全国各地运营商dns列表(供查询)

    全国各地运营商dns列表(供查询)DNS列表 省份 城市 中国电信 中国联通 中国移动 教育网 云南 昭通 222.172.200.68 61.166.150.123 221.3.131.11 221.3.131.12 211.139.29.170 202.203.66.3

    2022年5月30日
    132
  • realsense深度图像保存方法

    realsense深度图像保存方法一般使用realsense时会保存视频序列,当保存深度图像时,需要注意保存的图像矩阵的格式,不然可能造成深度值的丢失。在众多图像库中,一般会使用opencv中的imwrite()函数进行深度图像的保存。一般深度图像中深度值的单位是mm,因此一般使用np.uint16作为最终数据格式保存。例子:importnumpyasnpimportcv2deffun1(…

    2022年4月25日
    165

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号