【经验】项目开发中的Git解决冲突操作

置顶补充:
本文原先是word文档采用批注,现md改用括号进行补充
Git Version 2.39源码编译
Git版本过旧不支持switch restore等系列指令
请自行编译源码更新
tig是辅助工具,请自行安装(用git log可以实现相同效果)
操作经过项目实践,有误请指出~
推荐 cherry-pick 操作, rebase 使用较少如有纰漏请谅解~
个人开发分支图与文有差异,认准一个即可~


注意:本文档采用批注进行补充

总体概述:简单介绍了新人在项目开发中,使用Git操作解决冲突的两种常规处理

基础部分

线上分支(基本不会接触到)、开发分支(trunk为例)、个人开发分支(xfz_xxx_20230308为例)

三者关系:开发分支领先线上分支,个人开发分支领先开发分支

弄清楚两个概念:本地分支、远程分支
(注意区分未涉及push操作的一律是针对本地分支的操作)

本文本在每次分支改动时都会提示(不提示默认为上一次所处的分支)

实际操作

首先,从远程克隆(这个操作会自动产生一个同名的本地分支)最新的主干开发分支
git clone -b trunk xxx.git

(此时位于trunk分支)

然后,根据功能需求进行代码改动(不要提交和推送!!)

等到功能完成(可能一个功能、可能多个功能、可能部分完成)之后,有如下两种方案可以使用:

方案一:使用cherry-pick

  1. 创建一个临时本地分支并进行切换 git switch -c tmp

(此时位于tmp分支)

  1. 将完成功能部分提交(记为A),git add xxx && git commit -m xxx
    这个操作根据你完成功能的个数x重复执行x次,不同功能的代码改动要进行不同的提交
  2. 将剩余未完成的代码改动统一提交(记为B),git add . && git commit -m xxx

  1. 切回trunk分支并且同步拉取最新的远程分支:git pull

(此时位于trunk分支)

  1. 使用tig tmp查看tmp分支的提交记录,记下刚刚几次提交的commit id
  2. 使用 cherry-pick -n commit id对当前分支打补丁(逐个commit id使用,完成功能的提交先用,这里以A的提交为例)并解决冲突

  1. 切到一个新的个人开发分支xfz_xxx_20230308并推送到与对应的远程分支

git switch -c xfz_xxx_20230308

git add .

git commit -m xxx

git push origin -u xfz_xxx_20230308

(当前位于xfz_xxx_20230308分支)

  1. gitlab上提交 xfz_xxx_20230308 分支合并到主干分支trunk的请求

(记得勾选删除源远程分支)

  1. 合并完成后切回主干分支 git switch trunk,使用 git pull 拉取最新的变动

(当前位于trunk分支)

  1. 使用 git cherry-pick -n commit id 将剩余的代码改动重新复原(这里以B提交为例),恢复原先的工作进度

  1. 删除本地的临时分支和个人开发分支 git branch -D tmp xfz_xxx_20230308

如果临时需要拉取到最新的代码,则进行如上的1-6步操作即可

方案二:使用rebase

  1. 切换到一个新的个人开发分支 git switch -c xfz_xxx_20230308

(当前位于xfz_xxx_20230308分支)

  1. 针对需要提交的功能,分别进行多次提交,并推送到远程个人开发分支

  1. 对当前分支进行变基操作 git rebase origin/trunk -i

  1. 变基解决冲突后,会将之前的个人开发分支提交重新生成并提交,推送到个人开发分支

  1. gitlab上提交 xfz_xxx_20230308 分支合并到主干分支trunk的请求

(记得勾选删除源分支)

  1. 切回开发分支trunk ,并拉取最新的代码

(当前位于trunk分支)

  1. 删除本地个人开发分支 git branch -D xfz_xxx_20230308

其他

git stashgit reset指令的使用

#我的实习求职记录#
全部评论
用变基的时候 不急着推上远程 等变基完再推 同时基底分支(trunk)也要拉到最新
点赞 回复 分享
发布于 2023-03-25 19:20 广东

相关推荐

评论
3
14
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务