git cherry-pick 还没有merge的patch (fatal: bad object)

当程序员A的提交(commit_id1)未通过review时,程序员B无法通过git pull获取。本文介绍了三种方式,尤其是使用gitcherry-pick的方法来获取该提交。在执行gitcherry-pick commit_id1时遇到'fatal: bad object commit_id1'错误,原因是本地缺少该commit。解决办法是通过gerrit的cherry-pick下载命令,在本地执行后处理可能的冲突,从而成功应用A的提交。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Refrence

https://www.cnblogs.com/zndxall/p/9641586.html

场景:程序员A提交了一个commit到gerrit上,我们叫他为commit_id1,但是还没有review,那就是没有入库,程序员B想在本地拿到这个commitd_id1,既然这个提交没有入库,很明显,B单纯执行git pull是拿不到这个提交的。

目前我想到的有几种方式:

  1. 如果只是单纯了改了很少量的文件,程序员A把这几个文件直接发给B。
  2. 程序员A本地关于这个提交生成一个patch,发给B,B再在本地把这个patch打上
  3. 完全不需要额外的动作,只要使用git cherry-pick就可以了。

所以,关注点是最后一种git cherry-pick的方式,如果想要使用patch的方式,参考另一篇博客:https://www.cnblogs.com/zndxall/p/8093455.html

但是B在本地执行了git cherry-pick commit_id1,接着报错 fatal: bad object commit_id1 了!!! 那是因为git cherry-pick是本地特性,本地要有这个commit才可以被git cherry-pick。但是他本地并没有这个commit id,所以出现了这个错。

既然用了gerrit,那么就用gerrit提供的cherry-pick就好了,如下:

  1. 登陆gerrit页面,找到A提交的commit_id1,点击右上角的‘download’,然后复制cherry-pick那条
  2. 然后在本地执行刚才复制的命令,执行

如果跟B本地的文件有冲突,会显示error,然后执行git status 可以看到‘both modify’的字样,告诉你了冲突文件,修改冲突文件即可。

如果没有冲突,命令执行完,B本地执行git log 就可以看到A的commit_id1的提交了。

cherry-pick

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值