Q. 两台设备各自提交后,pull 说 "Need to specify how to reconcile divergent branches",push 又被 rejected —— 是不是把仓库搞坏了?
为什么会这样
你两边都各自往前走了一步。用第 2 篇的比喻说:档案馆里出现了两册各自往下写的草案,Git 不替你决定该用哪种方式把它们并成一册,所以停下来问你。
再仔细看 pull 的输出——它其实抓取成功了(你能看到类似 <旧哈希>..<新哈希> master -> origin/master 的一行),只是没有合并。而 push 被拒是连带的:你本地还不包含远端那些提交,硬推上去会覆盖掉另一台机器的工作,Git 直接拦下。
merge 还是 rebase
| merge | rebase | |
|---|---|---|
| 做法 | 造一个合并提交,把两条线接起来 | 把你的提交摘下来,重新贴到对方最新提交之上 |
| 历史 | 保留真实的分叉痕迹 | 变成一条直线,更整洁 |
| 冲突处理 | 一次性解决完 | 可能要边走边解,步骤多 |
| 提交哈希 | 不变 | 会变 |
| 适合 | 新手、多人协作 | 熟练之后 |
怎么做(新手选 merge)
git config --global pull.rebase false
git pull origin master
git push origin master中间会弹出编辑器让你写一句合并说明,保存退出即可(弹出来出不去,见本页下一条)。
怎么确认真的同步上了
三种硬证据,可靠度递增:
git rev-parse HEAD origin/master
git show origin/master:<项目说明文件> | grep -n "<你新增的章节标题>"
git --no-pager log --oneline --graph -8第一条最硬:两个哈希完全一样就是同步了。第二条直接读远端分支上的文件内容,证明东西真的推上去了。第三条看图——|\ 是分开、|/ 是合上,三个指针落在同一处就是同步:
* a1b2c3d (HEAD -> master, origin/master) Merge branch ...
|\
| * e4f5a6b 另一台机器的提交
* | 7c8d9e0 你的提交
|/
* 1122334 共同起点容易踩的坑:顺序必须是 先 commit → 再 pull → 最后 push。先 pull 会因为工作区还有没提交的改动而被拒绝。
记录于 2026-07-25