在提交被还原后如何精选提交?

17

我正在我的特性分支上工作,经过审查后,将其合并到开发分支以进行部署。后来,一位同事决定发布版本,并将他的和我的分支合并到主分支。在部署过程中,他意识到他的代码有错误,并撤销了主分支

在我们的分叉和拉取流程中,这意味着现在开发分支主分支都被撤销了。

当我今天早上来的时候,像往常一样从开发分支重新基于,然后才知道已经有了一个撤销操作。

现在我正在尝试从原始的特性分支中提取自己的工作,只是发现它给我带来了“空提交消息”,因为有撤销操作。

  1. 这是因为撤销操作是我以前提交的镜像吗?
  2. 有没有办法撤销撤销操作?(让我头疼)
  3. 是否有任何方法可以让我的提交显示在差异中,现在我已经重新基于?

非常感谢任何帮助。


请问您能否展示 git log --graph --decorate --oneline --branches --simplify-by-decoration 的结果,以便足够追溯到相关提交,并显示您感兴趣的提交在该结构中的位置?最简单的方法是例如使用 git tag 3a4ca33 so/the-revert,然后它将直接显示在日志中。 - jthill
2个回答

30
Cherry-pick和rebase会检查提交的补丁ID(基本上是更改的哈希值),并已经看到该更改存在于分支上,因此不会选择它。 重新定位有时可能有效,因为文件中的更改可能导致实际差异略有变化--导致不同的补丁ID - 但这似乎不适用于您的情况。
您可以“撤消撤消”,但这将重新引入您的同事引入的错误部分。 然后,您需要撤消同事所做的有缺陷的提交。 这需要大量撤销,并且需要保持清晰度,因此慢慢来,并且最好有人与您一起,以确保您没有遗漏任何内容。
另一个选择可能是通过执行git show COMMIT_ID | git apply来重播您的提交。 这将对您的工作树重新应用diff。 只要您的树干净,您就可以使用git commit -C COMMIT_ID重复使用原始提交的消息。 您可能可以使用git format-patchgit am来避免额外的步骤。

2
使用交互式变基来编辑您想要保留的第一个提交:git rebase -i myfirstcommitid^。应用修订提交。这将更改哈希值。使用git rebase --continue完成变基,现在所有提交都应该有新的ID,这样您就可以随意挑选了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接