【问题标题】:How to cherry pick commits after they've been reverted?还原后如何挑选提交?
【发布时间】:2014-07-04 02:35:53
【问题描述】:

我正在处理我的 feature branch,经过审核后,将其合并到 development 以进行部署。后来,一位同事决定发布并将他和我的合并到master。在部署时,他意识到他的代码有问题并恢复了master

在我们的 fork-and-pull 流程中,这意味着现在 developmentmaster 都被还原了。

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

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

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

非常感谢任何帮助。

【问题讨论】:

  • 您能否展示git log --graph --decorate --oneline --branches --simplify-by-decoration 的结果,以涵盖相关的提交并显示在该结构中您感兴趣的提交的位置,好吗?展示有趣的最简单的方法是例如git tag 3a4ca33 so/the-revert,然后它会直接显示在日志上。

标签: git github git-revert git-cherry-pick


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    你可以“revert the revert”,尽管这会重新引入你的同事介绍的损坏的位。然后你需要恢复你的同事所做的错误提交。有很多恢复,而且要保持直线,所以慢慢来,让别人和你坐在一起,以确保你不会错过任何东西。

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

    【讨论】:

      猜你喜欢
      • 2015-03-01
      • 1970-01-01
      • 2014-01-03
      • 2010-12-12
      • 2011-12-19
      • 1970-01-01
      • 2021-12-26
      相关资源
      最近更新 更多