一、问题描述
在将本地的代码push到远程分支时提示提交失败。
二、问题原因
我们多次(超过一次)commit代码,并且git pull和git pull --rebase混用更新代码时,可能就会出现这个错误。
例如:
1:首先拉取远程分支的代码。
2:写自己的逻辑,写完之后准备提交代码。
3:git add->git commint->git push的时候首先要pull(拉取远端最新的代码)。于是git pull –rebase。
4:由于项目紧张继续写自己的业务,然后add commit, git pull 这时候就不能正常push了,因为混用了git pull 和git pull --rebase两种拉取代码的方式。
三、注意事项
拉取分支的变动的两种方式
merge:这种方式会生成一个你本地和远程合并的提交。
rebase:这种方式会产生编辑操作(这种方式会改变你本地的提交历史,你本地的提交会在远端的基础上在进行提交)。
注意:拉取远端代码的时候要注意你自己需要明确你应该用什么方式去拉取远端代码,如果你的commit次数过多的话,rebase会基于你的提交次数进行代码合并。这里需要注意如果你的多次提交都改变了一个文件,并且这个文件合并的时候还有冲突的话,你需要解决很多次冲突。而merge方式会基于你最好一次提交的代码进行合并,只需要解决一次冲突。
四、解决措施
1:git log查看提交记录的版本信息
找到上方版本号,下面是你需要会退到的版本(即你没有提交代码的版本)
2:git reset --soft bf59xxxxxxxxxx71e
这里注意一定是soft,否则你的代码就都没有了。
3:git pull –rebase拉取远程分支代码
4:拉取代码提示错误
这时候需要保证你本地分支的干净(没有你添加的代码)
git stash(保存本地的任务进度,保存暂存区(我们add的更改内容)和工作区(我们通过IDE上更改的文件目录))
5:git pull –rebase拉取远程分支代码
6:git stash pop恢复本地任务
7:git add->git commit->git push继续提交你修改的代码