首页 >> 大全

gerrit出现Merge Conflict,小白解决心路历程

2023-06-22 大全 114 作者:考证青年

错误的解决之路

上出现Merge 时

在IDEA进行git pull时,会出现冲突如下所示,用HEAD>>>标出来

error: could not apply ec2a685ab...
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm ", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".

此时,我就慌了啊,怎么解决呢,那我先去删除我的冲突地方,即HEAD>的地方,保留上面的,上面是人家写的,我的是下面的

然后我进行git stash save "XXX",把我现在修改的进行保存起来,进行之前的类似的提交操作,结果出现如下报错

xxxx.java: needs merge

没办法我就不进行更新了,那老子直接进行git add .

吆西,成功了

鬼知道我怎么这么迷恋git stash save "xxxx",没想到成功了(报错的源头,因为我居然在no 分支上,说明保存错了啊)

Saved working directory and index state On (no branch): name

我进行git pull,错误升级,变成这样了

You are not currently on a branch.
Please specify which branch you want to rebase against.
See git-pull(1) for details.

行吧,git pull不行对吧,老子进行git stash pop stash@{0},没想到居然冒出这玩意,错误加倍

interactive rebase in progress; onto 12beffbb8
Last command done (1 command done):
......
(use "git rebase --edit-todo" to view and edit)
You are currently editing a commit while rebasing branch 'dev_ecloud' on '12beffbb8'.(use "git commit --amend" to amend the current commit)(use "git rebase --continue" once you are satisfied with your changes)Changes not staged for commit:(use "git add ..." to update what will be committed)(use "git restore ..." to discard changes in working directory)
.......

告诉我当前正在编辑的东西,如果提交的将会覆盖这个“”。使用git 进行代码覆盖,但是上次提交的进程还没有完成导致的。

老子不管三七二十一,先给它push上去,看看能咋地,结果成功了。但是我之前的任务被拉取的代码给覆盖,我大呼奇迹,简直魔术师转世。老子的代码都丢了,又得去再拷贝一遍。

我再看看我在哪个分支,用git -a,显示如下:

* (no branch, rebasing dev_ecloud)dev_ecloudmaster

老子甚至百度了,人家解决这种问题,就是创建临时分支,然后拉取dev分支,将临时分支合并到dev分支,删除临时分支

//先用git status查看现在临时分支的名字
git statusinteractive rebase in progress; onto 12beffbb8
Last command done (1 command done):pick .....(use "git rebase --edit-todo" to view and edit)
You are currently editing a commit while rebasing branch 'dev_ecloud' on '12beffbb8'.(use "git commit --amend" to amend the current commit)(use "git rebase --continue" once you are satisfied with your changes)nothing to commit, working tree clean//创建临时分支
git branch temp 12beffbb8//拉取dev分支
git checkout dev_ecloudAlready on 'dev_ecloud'
Your branch and 'origin/dev_ecloud' have diverged,
and have 3 and 1 different commits each, respectively.(use "git pull" to merge the remote branch into yours)//拉取远程dev分支
git checkout remotes/origin/dev_ecloud//进行将临时分支合并到拉取的分支上
git merge temp Auto-merging xxx.java
CONFLICT (content): Merge conflict in xxx.java
Automatic merge failed; fix conflicts and then commit the result.//看不懂上面,老子觉得大事不好,就删除临时分支
git branch -D temp

那我现在再看看git 吧,按照提示进行git add .,显示如下

interactive rebase in progress; onto 12beffbb8
Last command done (1 command done):pick ec2a685ab xxxxx(use "git rebase --edit-todo" to view and edit)All conflicts fixed but you are still merging.(use "git commit" to conclude merge)Changes to be committed:

然后我觉得按照提示吧,用git --edit-todo,结果是编辑代码的

到这里才是正确的解决方案

我就换成git --,这个用来解决合并冲突

注意注意

执行完git pull --rebase之后如果有合并冲突,使用以下三种方式处理这些冲突:git rebase --abort 会放弃合并,回到rebase操作之前的状态,之前的提交的不会丢弃;git rebase --skip 则会将引起冲突的commits丢弃掉(慎用!!);git rebase --continue 合并冲突,结合"git add 文件"命令一起用与修复冲突,提示开发者,一步一步地有没有解决冲突。(fix conflicts and then run "git rebase --continue")

具体的细化就是这个

对上述冲突的处理1、使用 $git rebase --abort执行之后,本地内容会回到提交之间的状态,也就是回到以前提交但没有pull是的状态,简单来说就是撤销rebase。2、使用 $git rebase --skipgit rebase --skip 引起冲突的commits会被丢弃,对于本文应用的例子来说开发者A对c.sh文件的commit无效,开发者A自己修改的部分全部无效,因此,在使用skip时请慎重。执行:$ vim c.sh查看本地c.sh文件提交内容,展示如下图所示,执行语句之后开发者A的修改无效。3、使用 $git rebase --continue执行完$git pull --rebase 之后,本地如果产生冲突,手动解决冲突之后,用"git add"命令去更新这些内容的索引(index),然后只要执行:$ git rebase --continue 就可以线性的连接本地分支与远程分支,无误之后就回退出,回到主分支上。
注意:一般情况下,修改后检查没问题,使用rebase continue来合并冲突。

然后我就利用git --,就显示成功了。显示结果如下

//解决完成冲突,合并冲突,没有问题的话就合并到主分支
git rebase --continue[detached HEAD da99a7669]xxxxx
Successfully rebased and updated refs/heads/dev_ecloud.

然后就继续别的操作就完成了,主要是上面这个命令。

还有一点补充:

在上因为这个任务出现冲突,导致在这之后的其他工程也出会出现Merge

怎么解决呢?

然后打开你的上的,勾选 ,点击,你就解决完毕了。

为啥这就行了呢,因为这个就相当于基于现在最新的dev分支拉取基线,我感觉很像咱们再IDEA命令行中写的git --。

这就解决了,这是我的心路历程,如果觉得不错就点个赞吧!

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了