13

我正在研究我的feature branch,经过审查,将其合并development到部署中。后来,一位同事决定做一个发布,并将他和我的合并到master. 在部署时,他意识到他的代码有问题并且被还原了master

在我们的分叉流程中,这意味着现在developmentmaster两者都被恢复了。

今天早上我来的时候,我像往常一样从开发中恢复过来,后来才知道有一个恢复。

现在我正在尝试cherry-pick从原来的工作开始,feature branch只是意识到由于还原它给了我“空提交消息”。

  1. 这是因为 revert 是我之前提交的镜像吗?
  2. 有没有办法恢复还原?(让我头疼)
  3. 既然我已经重新设置了基准,是否有任何方法可以让我的提交显示在差异中

任何帮助是极大的赞赏。

4

2 回答 2

23

Cherry-pick 和 rebase 检查提交的补丁 ID(基本上是更改的哈希)并且已经看到更改存在于分支上,因此它不会选择它。变基有时会起作用,因为文件中的更改可能导致实际差异发生了一点变化——导致不同的补丁 ID——但对你来说似乎并非如此。

你可以“revert the revert”,尽管这会重新引入你的同事介绍的碎片。然后你需要恢复你的同事所做的错误提交。这是一个很大的恢复过程,而且要保持笔直,所以慢慢来,让某人和你坐在一起,以确保你不会错过任何东西。

另一种选择可能是通过执行来重放您的提交git show COMMIT_ID | git apply。这会将差异重新应用于您的工作树。只要你的树是干净的,你就可以git commit -C COMMIT_ID用来重用来自原始提交的消息。您可能可以使用git format-patchandgit am来避免额外的步骤。

于 2014-05-15T15:46:39.417 回答
1

使用交互式变基来编辑您要保留的第一个提交git rebase -i myfirstcommitid^。应用修改提交。这应该改变哈希。使用所有提交完成 rebasegit rebase --continue现在应该有新的 id,这应该允许您在闲暇时挑选。

于 2020-09-22T17:54:43.757 回答