git提交代码到gerrit失败

╄→гoц情女王★ 提交于 2019-12-18 20:44:06

                                       git提交代码到gerrit失败

一、前言

tips:如果我们想在gerrit上管理代码。那么你的每次提交都要带上一个commit_id,这样才能保证你能push到远端的rfes/for/master上。(注意是这个Change_id)

要每次提交代码的时候都带上一个这样的唯一标识:

怎么生成唯一标识可自行查找 

二、背景:

提交代码的正确姿势:

1:提交代码git add .  git commit --amend(注意这里一定是amend,因为要保证每次的patchset是同一次提交)

2:拉取远端最新的变化git fetch --all

3:rebase主干分支(master)的代码变化git rebase origin/master -i

4:提交代码到主干分支 git push origin HEAD:refs/for/master

错误复现:

提交代码没有问题,在拉取远端最新的分支变化的时候我执行的是git catch(起的git命令别名。这里我以为执行的是git fetch --all其实是git remote update origin --prune)前者是拉取远程分支的变动,后者是更新分支的变动。所以实际上并没有更新远程分支的代码。这时候我push到远程分支被拒绝。所以我就reset到master的上一次提交,然后再add, commit --amend,push -f 自己开发的远程分支成功了。push origon HEAD: refs/for/master也成功了。但是比较尴尬的是我是把别人的提交都合到我自己的这次提交了。这肯定是有问题的。提示错误如下。

这是因为我们的提交包含的远程master的提交。包含了很多master已经提上去的代码。所以这里一直提示冲突。 

三、解决思路

1:首先我们rebase origin/master分支的代码,这时候再push肯定是不行的。因为我们的这次提交包含了master已经存在的代码。

2:我们reset到master的最新一次提交,这时候我们再rebase origin/master,再提交还是不OK,因为我们分支上的最新一次提交

包含了之前的master的提交,还是有重复代码的出现。

3:我们从开发分支上切出一个新的分支,reset到最新的master提交。rebase我们的远程开发分支的内容。这时候我们把所

有内容stash,再去rebase origin/master的内容,这时候保存master的提交记录。再stash或apply 把代码应用于基于现在

的提交。再提交 push成功。

四:总结

1:解决冲突的方法有很多,不要试着用reset方式解决冲突。尤其是在rebase方式合并代码的情况。reset适合(你自己分支开发的,只有你自己提交代码,想把多个提交合并成一个提交。其实这时候可以在rebase远程的时候加个-i)

2:rebase远程代码的时候注意是rebase origin/master 如果是rebase origin master 分支会跳到master,并且在master上执行rebase。

3:不要rebase本地分支的代码,一定要rebase 远程分支的。因为rebase本地的时候会在在你的分支有一个合并的提交记录。会拒绝你的push操作。

3:如果碰到自己不能解决的问题,一定要及时求助,并且做好代码的备份。最好的方式就是切到新分支保存自己的内容。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!