解决GERRIT MERGE冲突“GIT SUBMIT INCLUDING PARENTS”

本文讲述了多人协作中commit依赖导致的Gerrit gitsubmitincludingparents问题,通过创建新分支、cherry-pick操作和codereview流程来解决。关键步骤包括检查分支、克隆远程分支、迁移commit B、正常提交和刷新代码审查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题场景
gerrit merge冲突“git submit including parents”根本原因commit相互依赖提交。是用户push了commit A,在commit A基础上提交了commit B,在commit B基础上提交了commit C,如下图(上)。这种场景大多出现在多人同时在往一个分支上提交代码,用户提交完后,没有及时审核并合并代码;其他用户在之后提交了代码,并进行了合并,用户早些时候提交的代码有冲突。用户此时在Gerrit上abandon了commit B,在B基础上继续提交了commit C,则Gerrit会出现git submit including parents,如下图(下)。

在这里插入图片描述
二、解决方式
1.查看所有分支

git branch -a

2、从远程分支上重新创建一个新的工作分支:git fetch origin master(远程分支):new_work(新分支)

$ git fetch origin master:newbranch

3、切换到新的工作分支:git checkout newbranch

$ git checkout newbranch

4.将commit B 移到新分支上(gerrit 页面右上角download中直接复制cherry-pich命令):git fetch ssh://xxx xxx && git cherry-pich xxx

$ git fetch ssh://admin@192.168.255.169:29418/testmygit refs/changes/05/605/1 && git cherry-pick FETCH_HEAD

5.正常提交代码:

git push origin HEAD:refs/for/mater(需要提交到的分支)

6.刷新gerrit,重新做code review

在这里插入图片描述

### 如何在 Gerrit解决代码合并冲突 当遇到代码合并冲突时,在 Gerrit解决问题的过程涉及多个方面,包括识别冲突、获取最新版本的代码以及执行必要的变更来解决这些冲突。 #### 检查当前提交状态 为了有效处理冲突,首先要确认本地工作区的状态。这可以通过运行 `git status` 命令完成,该命令会显示哪些文件处于未跟踪或修改状态下[^4]。 #### 获取最新的远程仓库代码 一旦了解了本地环境的情况,下一步是从远端拉取最新的改动。使用如下命令可以实现这一点: ```bash git fetch origin ``` 此操作不会自动合并更改到当前分支;它只是下载更新并将其存储在一个临时位置以便后续处理。 #### 执行变基(Rebase) 如果希望保持线性的历史记录,则可以选择对本地分支上的提交进行变基。这样做可以让自己的更改基于最新的上游变化之上,从而简化最终集成过程中的冲突解析。具体做法如下所示: ```bash git rebase origin/master ``` 这里假设目标分支名为 master 。请注意,在某些情况下可能需要替换为其他名称,比如 feature 或 develop 等。 #### 解决冲突 对于那些确实存在差异的地方——即所谓的“冲突区域”,开发者需手动编辑受影响的源码文件。通常来说,Git会在发生分歧的位置插入特殊的标记帮助定位问题所在之处。例如: ``` (Code not in Conflict) >>>>>>> (first alternative for conflict starts here) Multiple code lines here =========== (second alternative for conflict starts here) Multiple code lines here too <<<<<<<< (Code not in Conflict here) ``` 上述格式表明同一部分出现了两种不同版本的内容,分别位于分隔符两侧。此时应当仔细审查每一方提供的变动,并决定保留哪一部分或是创建全新的解决方案[^1]。 #### 标记冲突解决 每当解决了某个特定文件内的全部冲突之后,都应告知 Git 这些问题是已经被妥善处置过的。可通过下面这条指令达成目的: ```bash git add <file> ``` 重复这一流程直至所有相关联的问题都被圆满解答为止。 #### 完成变基过程 最后一步是要继续正在进行中的变基序列直到结束。一般而言,只需简单输入以下命令即可: ```bash git rebase --continue ``` 如果有任何无法立即克服的技术难题阻止了进程向前推进,也可以选择中断整个事务并通过 `git rebase --abort` 来撤销之前所做的尝试。 #### 提交修正后的补丁集给 Gerrit 成功化解所有的冲突后,记得再次推送经过调整的新版提交至 Gerrit 服务器供审核人员审阅。这时需要用到带有特殊参数的推送语法: ```bash git push origin HEAD:refs/for/<branch_name> ``` 其中 `<branch_name>` 应被替换成实际的目标分支名,如 r60016_201_bugfix_1.0[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值