git - cherry-picking功能提交到新分支,恢复提交,rebase不按预期工作

时间:2014-03-17 17:22:27

标签: git git-rebase

我最近不得不从我们的开发中删除一项功能。分支,因为它被搁置到以后的日期。

为此,我创建了一个分支,其父母位于' dev'在第一个功能提交之前提交一个提交(第一个功能提交是来自另一个分支的压缩合并。)然后,我将所有从dev的功能提交挑选到新分支中。最后,我在dev上做了一个大的恢复提交,删除那些挑选的提交。

现在我想在dev上重新定义新分支以使其保持最新状态。如果我运行" git rebase dev",新分支的负责人将成为大型恢复,因此该功能将丢失。

使用" git rebase --strategy = our dev"将跳过功能分支中的所有提交,并显示消息"已应用:0001 ..."。

如何将功能分支重新绑定到dev上,以便将该功能上的所有提交应用于dev的头部?

也许比我在这里所描述的更好的方式来进行这个过程?

3 个答案:

答案 0 :(得分:3)

您可以通过检查功能分支并执行以下操作来解决此问题:

git rebase --onto dev HEAD~<number of commits you care about> --force-rebase

这指示git重放您指定的提交范围,并忽略提交是否发生在dev上提交之前的某个时间点。

请注意,这将为您留下如下所示的历史记录:

<did some work> -- <reverted all of that work> -- <re-did that work>

对你来说可能不是那么有用。这里的一些其他答案详细说明了如何通过重写来获得更清晰的历史记录,具体取决于您的团队对历史重写的容忍度。

答案 1 :(得分:1)

假设你不介意改写历史记录,那么做一整件事的更好方法就是一个互动的改变:

  • 在提交删除之前创建一个分支foo。
  • 为了避免丢失它,请在提交时标记或建立分支以进行删除。
  • 把自己放在有问题的分支上(例如git checkout your-dev-branch)。
  • git rebase -i foo
  • 你将被编入一个编辑器中,然后选择&#34;选择&#34; foo和当前头之间每次提交的行。删除要删除的提交[s]的行[s]。保存,退出
  • 解决所有冲突。

这将

  • 重写dev分支并删除相关提交。
  • 将拉出的特征保留在分支上(或标记,取决于第二步),以便稍后挑选(或以其他方式)到修改后的dev分支上。 在做这类事情之前,我总是先拿一个克隆或放一些明智的标签,以防万一出错。

答案 2 :(得分:0)

不是专家,但如何恢复功能,然后创建分支,然后选择新分支上的功能sha1s。