我正在开发我的feature branch
,经过审查后,将其合并到development
中进行部署。后来,一位同事决定做一个发布,并将他的和我的合并到master
中。在部署时,他意识到他的代码有bug,并还原了master
。
在我们的叉拉流中,这意味着现在development
和master
都恢复了。
当我今天早上来的时候,我从平常的开发中重新开始,后来才知道有一个恢复。
现在我正试图从原来的feature branch
中cherry-pick
我的工作,只是为了意识到它给了我"空提交消息",因为恢复。
- 这是因为revert是我以前提交的镜像吗?
- 有办法恢复恢复?(让我头疼)
- 是有无论如何让我的提交显示在diffff现在我已经重新基于
非常感谢任何帮助。
Cherry-pick and rebase检查提交的补丁id(基本上是更改的散列),并且已经看到该更改存在于分支上,因此它不会选择它。重基有时可以工作,因为文件的更改可能会导致实际的困难发生一点变化——导致不同的补丁id——但这似乎不是您的情况。
你可以"revert the revert",尽管这将重新引入你的同事引入的碎片。然后,您需要还原您的同事所做的错误提交。这需要大量的恢复,而且要保持笔直,所以慢慢来,让别人坐在你身边,以确保你没有错过任何东西。
另一种选择可能是通过执行git show COMMIT_ID | git apply
来重放提交。这再次将diff应用到工作树中。只要您的树是干净的,就可以使用git commit -C COMMIT_ID
来重用来自原始提交的消息。您可以使用git format-patch
和git am
来避免额外的步骤。
使用一个交互式的rebase来编辑你想要保留git rebase -i myfirstcommitid^
的第一个提交。应用修改提交。这将改变哈希值。使用git rebase --continue
完成重基,现在所有提交都应该有新的id,这应该允许您在闲暇时挑选。