为什么提示没有changid?

📅 2026/7/23 17:52:15 👁️ 阅读次数 📝 编程学习
为什么提示没有changid?

本地有提交,但是被服务器拒绝拉。

默认 git pull origin master 等价于:

git fetch origin
git merge origin/master
Git 的做法是:把两边合在一起,并新建一条 merge commit M:

A / \

… → B → C → M ← “Merge branch ‘master’ of …”
M 是专门为这次合并生成的,message 通常是 Merge branch ‘master’ of …
这条 commit 往往没有 Change-Id(merge 时 hook 通常不会给它加)
推 Gerrit 时,M 也在推送链里,就会被拒
这就是你遇到 0bd099b 的原因。

0bd099b 在你自己的电脑上,不在 Gerrit 上(所以 Gerrit 才会 reject,它从未成功 push 上去)。
git pull 能成功,pull 没问题。
问题是 pull 用了 merge,多了一条 本地 merge 提交;推 Gerrit 时这条也要带 Change-Id,但它没有,就被拒了

和“服务器 merge 拉不下来”的区别
你的理解 实际情况
服务器有 merge,pull 失败
pull 成功了
问题在远程
问题在 本地历史里多了一条 merge
最新 commit 缺 Change-Id
最新那条有;中间 merge 那条没有
以后怎么做

拉代码时用 rebase,避免产生 merge commit

git pull --rebase origin master

或全局设置

git config --global pull.rebase true