Git 冲突解决记录
Git 冲突解决记录
背景
- 本地:Windows Obsidian Vault,使用HTTP+Socks5代理推送到GitHub仓库
timozhuai/md_obsidian - 报错:
git push被拒绝,远程main分支存在本地没有的提交,提示fetch first - 执行
git pull origin main,发生文件内容合并冲突,Git进入合并中状态,此时不能直接push。 - 冲突文件:
论文/Welcome‑to‑Better‑Notes‑LL6PXVMX.md,冲突内容是Obsidian内部元数据(tags(version、)parent(version、)$version(version、)$libraryID(version、)$itemKey)。 - 决策:舍弃本地版本,完整保留远程版本的元数据。
完整流程
git pull origin main→ 自动合并失败,进入MERGING状态,产生冲突文件。打开冲突md文件,识别冲突标记:
<<<<<<< HEAD # 你的本地内容 ======= # GitHub远程内容 >>>>>>> 远程commit哈希编辑文件:全部删除三组冲突标记
<<<<<<</=======/>>>>>>>,只保留分割线下方远程的元数据内容。将修复完毕的文件加入暂存区
git add "论文/Welcome-to-Better-Notes-LL6PXVMX.md"
- 完成合并提交(不要再执行 git pull)
git commit -m "resolve merge conflict: keep remote version"
- 携带代理参数推送远程
git -c http.proxy=socks5://127.0.0.1:10808 -c https.proxy=socks5://127.0.0.1:10808 push origin main
两个关键备选方案(本次没有使用)
- 如果不想处理冲突(version、)放弃远程改动:终止合并,回退pull之前状态,强制覆盖远端
git merge --abort
git -c http.proxy=socks5://127.0.0.1:10808 -c https.proxy=socks5://127.0.0.1:10808 push -f origin main
⚠️
-f强制推送会丢失远程独有提交,本地文件不变。
- 如果想保留本地版本:删除标记,只保留
HEAD块内本地内容,再add/commit/push。
Obsidian场景特别注意点
- 本次冲突不是正文笔记,是Obsidian内部元数据($libraryID(version、)itemKey等),元数据不一致会导致内部链接(version、)画布关系异常。
- 冲突标记绝对不能留在md文件里提交。
- Git处于
MERGING状态时,不能直接push,必须解决冲突并commit完成合并流程。 - 当前仓库使用HTTPS协议,SSH密钥不生效;代理只对http/https协议生效。
快速状态排查命令
git status # 看是否处于合并中\(version、\)哪些文件冲突
git log --oneline -3 # 看本地提交记录
踩坑回顾你刚才遇到的错误顺序
- push → rejected(fetch first):远程有新提交
- pull → merge conflict:自动合并失败进入MERGING
- 未解决冲突直接再次push → rejected(non‑fast‑forward):合并流程没走完。
本质:pull不等于自动完成,出现conflict,人必须介入修复,commit之后才算pull真正完成。