如何将旧的提交移动到Git中的另一个分支?

6
我在GIT中有一个项目,目前有三个分支:masterdevelopfeature/core-md-topbar
我正在feature/core-md-topbar分支上工作,发现了一个bug,该bug也存在于development分支中,我无意中在feature/core-md-topbar分支中修复了该bug。
现在,我还没有将任何内容推送到远程,但我希望我的修复能成为develop分支的一部分。
所以,这是我当前的提交: enter image description here 因此,我希望以FIX开头且哈希值为64376b2的提交紧跟在哈希值为8f928d0的第二次提交之后。
当然,我不应该失去任何工作。
解决这个问题的GIT方式是什么?

作为历史的新头/分支,或者在8f92和8b96之间? - Lasse V. Karlsen
2
远程仓库有develop分支吗?如果有,它指向哪个提交? - Uzbekjon
如果没有推送任何更改,您很可能可以使用交互式变基来重新排序变更集。 - Lasse V. Karlsen
没有推送任何内容。你能分享一下我需要的命令吗?因为我尝试使用rebase很多次,但总是搞砸我的代码库 :-) - Complexity
您想将修正提交应用于“开发”、“core-md-topbar”中的提交进行重新排序,还是其他什么?这并不清楚。 - Tim Biegeleisen
修复应该在“开发”中应用。我不明白为什么提交应该重新排序... - Complexity
1个回答

4

core-md-topbar中挑选修复提交并将其合并到development分支:

git checkout development
git cherry-pick 64376b2

core-md-topbar中删除修复提交:

您可以尝试进行交互式变基:

git rebase -i HEAD~8

会出现一个类似以下的窗口。请注意,提交记录按照从的顺序显示。

pick 2eb670c comment
pick 8f928d0 comment
pick 8b96886 comment
pick 8fa512e comment
pick 995396f comment
pick dd4ab71 comment
pick 64376b2 comment
pick 704c5da comment

删除包含修复提交 64376b2 的行(不要删除提交!),留下如下内容:

pick 2eb670c comment
pick 8f928d0 comment
pick 8b96886 comment
pick 8fa512e comment
pick 995396f comment
pick dd4ab71 comment
pick 704c5da comment

现在保存并关闭窗口,这将开始实际的变基过程。在每个提交从8次提交之前重新应用时,可能会出现合并冲突。
第一个cherry-pick安全且可靠。但是交互式变基存在潜在风险,如果 core-md-topbar 分支已经公开共享,并且您已经从修复提交开始发布。如果您已经发布了,则更安全的做法是撤销该修复提交,假设您不想在 core-md-topbar 分支中使用它。
git checkout core-md-topbar
git revert 64376b2

这将指示Git在core-md-topbar的HEAD上进行一个新的提交,有效地撤消修复提交。发布这个提交不会给其他人正在使用的公共分支造成问题。

当跨越多个分支时,使用rebase安全吗? - Complexity
等一下……我不明白你的要求。你在 core-md-topbar 里提交了一个修复的 commit,但你想要将这个修复合并到 development, 而且你还想 rebase core-md-topbar?这没有任何意义。请解释清楚。 - Tim Biegeleisen
必须从 core-md-topbar 中删除提交并应用到 development - Complexity
抱歉我的问题不够清楚。对我而言,它似乎很明确 :-) - Complexity
听起来不错。在解决了错误修复提交问题之后,您可以将功能基于开发进行变基。这应该会再次引入错误修复,但现在它是预期的;您在开发中修复了一个开发错误,然后通过变基将其带入了功能。 - Tim Biegeleisen
显示剩余5条评论

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