解决git cherry-pick xxx fatal: bad object xxx

解决git cherry-pick xxx  fatal: bad object xxx

        我的情况是在B分支的同步A分支的一个commit,出现了如标题的错误。我是直接在web上看到A分支新提交的这个commit,然后我直接在本地的B分支中进行git cherry-pick xxx。就出现了这个问题。经过尝试问题是出在了我没有切到B分支pull一下。总结过来就是git cherry-pick是本地特性,本地要有这个commit才可以被git cherry-pick。


        另关于git cherry-pick使用的文章参考这里:git cherry-pick 小结

### 如何解决 Git cherry-pick 命令遇到的 'fatal: bad object' 错误 当尝试使用 `git cherry-pick` 时如果遇到了 `'fatal: bad object commit_id'` 的错误,这通常意味着指定的提交ID (commit ID) 并不存在于当前仓库的历史记录中。为了成功应用来自其他分支(如 develop)的一个特定提交到 new_feature 分支上,可以按照下面的方法操作: #### 方法一:获取远程更新并重新尝试 确保本地拥有最新的更改,可以通过拉取最新版本来同步远端的变化至本地环境。 ```bash git fetch origin ``` 之后再试一次带有正确参数的 `cherry-pick` 操作: ```bash git checkout new_feature git cherry-pick <commit-id> ``` 这里 `<commit-id>` 是想要挑拣的那个具体提交对象的名字或哈希值[^1]。 #### 方法二:确认目标提交存在于本地历史中 由于 `git cherry-pick` 只能应用于已知存在的提交,因此需要先验证该提交确实存在并且已经被下载到了本地副本里。可以通过查看日志找到所需的提交信息: ```bash git log --oneline develop | grep "<part of the message or hash>" ``` 一旦找到了确切的目标提交,则可以直接对其进行挑选而不会触发上述提到的对象丢失问题[^2]。 #### 方法三:从另一分支检出所需提交后再做处理 假如仍然无法解决问题,可能是因为所要选取的提交并不属于任何追踪路径中的任何一个分支。此时可以在临时创建的新分支基础上完成此过程,然后再合并回原工作区: ```bash git checkout -b temp_branch_for_cherrypicking develop git checkout new_feature git cherry-pick <commit-id-from-temp-branch> # 完成后可删除临时分支 git branch -d temp_branch_for_cherrypicking ``` 通过以上几种方式应该能够有效规避因缺少相应提交而导致的 `bad object` 类型的错误提示。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁保康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值