Git冲突问题总结

王梦婵 3 阅读

一、冲突

1、推送时冲突

本地开发时,未先拉取远程最新代码就提交本地修改,推送代码时触发冲突; 冲突合并处理过程操作失误,将远程未拉取的同事新代码覆盖为旧版本并提交。 后续执行回滚git revert撤销错误合并提交(1),本地代码恢复为自己修改后的正确版本,但同事的变更被回退到修改前状态,最终分支内:自身代码为最新,同事变更丢失。

2、解决方法

首先拉取最新代码(5),查看当前分支(2),将丢失的版本恢复,并加入当前分支(3),之后推送到远程服务器(4)。

(1)执行 revert 撤销错误的 merge 合并提交

merge 提交存在两个父节点,‑m 1代表保留第 1 条父分支的代码,撤销本次合并带来的错误变更

git revert -m 1 e822166

(2)查看当前分支状态

git log --oneline --graph

(3)使用 cherry‑pick 捡回丢失的c4cf3c0版本提交,并加入当前分支

cherry‑pick 会生成全新 commitId,代码内容和原提交保持一致

git cherry-pick c4cf3c0

(4)推送到远程dev-2603分支

git push origin dev-2603

(5)拉取dev-2603最新提交的版本代码

git pull origin dev-2603

二、避免再次复现该问题

  1. 本地提交代码之后、推送远程之前,务必执行git pull origin 分支名,拉取远程分支最新代码;

  2. 出现合并冲突,禁止直接选择「使用我的版本」覆盖,需要打开文件手动比对,同时保留双方有效业务代码;

  3. 多人共用分支禁止使用git reset --hard+ 强制推送push -f,会直接抹除远程提交,破坏团队其他人本地仓库。