工作流实战
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 工作流实战
- 张三新建 develop 分支
git checkout master
// 本地仓库基于 master 分支新建了一个 develop 分支
git checkout -b develop
// 远程仓库新建 develop 分支,并将本地仓库 develop 分支与远程仓库 develop 分支关联起来
git push -u origin develop
// 查看本地分支和远程分支的对应关系
git branch -vv
- 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
- 张三、李四基于 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
-
feature 分支合并到 develop 分支
(1)张三发起合并请求:从 feature/001 分支合并到 develop 分支
(2)李四发起合并请求:从 feature/002 分支合并到 develop 分支 -
张三、李四删除 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
- 在 develop 分支上进行集成测试
- 新建 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
- 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)新建 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 分支代码上线
- 张三修复 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'
-
bugfix/001 分支合并到 master 分支
(1)发起合并请求
从 bugfix/001 分支合并到 master 分支
(2)master 分支代码上线 -
bugfix/001 分支合并到 develop 分支
(1)发起合并请求
从 bugfix/001 分支合并到 develop 分支
(2)删除 bugfix 分支
git checkout master
git branch -d bugfix/001
git push origin --delete bugfix/001
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100704.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...