写在前面:如果日常没有经常拉取远端代码习惯的话, 在提交代码的时候可能会遇到代码冲突*的情况。下面我就展示一种常用的提交代码的方式,遇到冲突了,如何最优解决的。(尝试了很多种, 最喜欢这种方式!)*
✅ 完整流程总结如下:
🧭 场景描述
你在本地做了修改并提交了代码:
git add .
git commit -m "本地提交"
然后尝试推送:
git push origin main
结果失败,提示冲突或类似信息:
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to '...'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally.
🔁 正确处理流程:使用 git pull --rebase
1. 拉取远程更新并变基到本地提交之上
git pull --rebase
这时 Git 会尝试将远程的最新提交应用到你的本地提交之前,并可能会提示冲突。
2. 查看冲突文件
Git 会列出冲突的文件。你可以通过以下命令查看哪些文件处于冲突状态:
git status
冲突文件中会出现如下标记:
<<<<<<< HEAD
远程版本的内容
=======
你的本地内容
>>>>>>> ...
3. 手动解决冲突
用编辑器打开每个冲突文件,找到上面这种标记区域,进行以下操作:
- 删除你不想要的部分。
- 整合你需要保留的代码。
- 删除所有冲突标记(
<<<<<<<
,=======
,>>>>>>>
)。
4. 标记冲突已解决
解决完一个文件后,要将其加入暂存区:
git add <filename>
解决完所有冲突后,继续 rebase 流程:
git rebase --continue
如果还有更多冲突,重复上述步骤;如果没有,则 rebase 成功完成。
5. 最终推送到远程仓库
git push origin main
此时应该可以成功推送。
📌 总结一句话:
当
git push
被拒绝时,使用git pull --rebase
合并远程更改,手动解决冲突后继续 rebase,最后再 push 即可。
🧠🧠🧠 总结整个流程(带说明)----强烈建议好好理顺一下这个逻辑
步骤 | 说明 |
---|---|
git add + git commit | 你的代码本地提交成功了 |
git push | 失败(远程有更新) |
git pull --rebase | 拉下远程更新,并尝试把你的提交“重放”在它之后 |
(遇到冲突) | Git 暂停 rebase,提示你解决冲突 |
手动修改冲突文件 | 解决冲突 |
git add 冲突文件 | 告诉 Git:“我处理完这个文件了” |
git rebase --continue | Git 会用你修改后的内容自动重新 commit |
最终 git push | 推送最新的 commit 到远程分支 |
💡 小贴士
命令 | 用途 |
---|---|
git rebase --abort | 放弃当前 rebase 操作,回到 rebase 前的状态 |
git stash + git pull + git stash pop | 另一种方式,适用于不想直接 rebase 的场景 |
使用 IDE 工具 | VSCode、IDEA 等提供图形化冲突解决界面,更直观 |
版权声明:
本文为 兰舟比特 原创内容,如需转载,请注明出处及作者,禁止未经授权的引用或商用。