无法挑选一个提交到分支(坏对象错误)

kin*_*nar 5 git merge cherry-pick

好的,我们一般的 git 结构是,我们有一个 master 分支,一个或多个发布分支,然后是特性分支。所有主要开发都发生在功能分支中,但错误修复有时会直接提交到发布分支。

在将一些功能合并到发布分支时,出现了一个错误的合并,但我们没有注意到它,直到之后提交了几个错误修复。一些功能分支在合并后被删除(我们将更改工作流程,仅在将来发生实际发布后才执行此操作)。如果它们没有被删除,我们只需废弃发布分支并重做即可。

我现在正在努力消除这种糟糕的合并。我在合并之前从发布分支创建了一个新的发布分支。

git checkout <hash prior to merge>
git checkout -b new_release_branch
git merge feature_branch_which_resulted_in_bad_merge_before
Run Code Online (Sandbox Code Playgroud)

这个分支现在是我们想要的方式,但我仍然需要引入在错误合并后对 release_branch 进行的少数(少于 5)次提交。但我不知道该怎么做。我认为樱桃挑选是最好的选择,但当我尝试时,我得到:

$ gitcherry-pick fa4a761
错误:fa4a761:无法挑选一个 blob
致命:挑选失败

$ git cherry-pick 44923992349dae68d982dd305a289ba63f8f6d0b
fatal: bad object 44923992349dae68d982dd305a289ba63f8f6d0b
Run Code Online (Sandbox Code Playgroud)

请注意,上面的哈希是从 gitk 复制/粘贴的,但它不会显示在我的任何分支的任何 git 日志中。

我还回去检查了我现在正在尝试修复的所有提交,它们都是相同的。我不确定这意味着什么,或者为什么它们会出现在 gitk 中而不是出现在 git log 中(gitk 从哪里获取信息?)。


好的,更新时间。这是我遗漏的故事的其余部分。当我发现损坏的合并时,我创建了一个新的存储库克隆,以便从我们的中央存储库中“使用”。

事实证明,所有问题提交都从未从存储库的原始副本推送到中央存储库。一旦我推动了这些提交,我就能够很好地修复所有问题。

小智 10

您需要执行 git fetch 才能使最新提交与本地同步

git 获取

然后做

git 樱桃挑选


kin*_*nar 1

原来我只是个白痴。

它不起作用,因为克隆的存储库中不存在未推送的提交。

在开始“修复”分支之前,我已经将中央存储库克隆到另一个目录中。丢失的提交实际上从未被推送到中央存储库,因此克隆存储库中当然不存在哈希值。