如何从错误的分支而不是主分支创建分支中恢复
How to Recover from Creating a Branch from the Wrong Branch Instead of Main
我发现自己经常遇到 Git 的情况:
- 我从主分支创建并签出分支 A
- 在分支 A 上,我做了一些工作,创建了一些提交等,然后推送我的更改
- 我需要做一些不相关的工作,所以我创建并签出分支 B
- 我在分支 B 上创建了更多提交并推送
- 我去创建一个 PR 和...哎呀。我从分支 A 创建了分支 B,所以突然间我的 PR 中有了来自分支 A 的所有这些不相关的提交。我需要从主分支创建分支 B。
只是想知道最好的工作流程是什么。当然,我可以删除分支 B,重新创建它并复制我的提交,但这看起来很乏味。变基不是一种选择,因为我已经推送到远程仓库。也许我可以还原从分支 A 转移到 B 的所有提交?也许我应该创建一个别名,在创建分支之前检查 main?
最简单的解决方案:变基到
git rebase
有 onto 模式来做你想做的事:
git rebase --onto main A B
将从 A 中取出 B 并将其变基到 main。
如果在 运行 执行此操作时已检出 B,则无需在 rebase 命令行中指定它。
Cherry Pick 选项 您也可以使用 cherry pick 操作。
在正确的地方创建一个新分支,从 B 中挑选所有提交到它上面,然后将 B 重置到它。
git checkout main # or where the branch should start from
git checkout -b B-new # pick a new name, you'll need access to both B and B-new
git cherry-pick A..B # cherry pick all commits on B not on A
现在 B-new
是您首先要创建的分支。您可以只使用新名称,或者如果您想保留名称 B
,请将其重置为 B-new
:
git checkout B
git reset --hard B-new
并清理,因为您现在不再需要 B-new
:
git branch -d B-new
但是所有这些都在做 rebase 所做的事情...
我发现自己经常遇到 Git 的情况:
- 我从主分支创建并签出分支 A
- 在分支 A 上,我做了一些工作,创建了一些提交等,然后推送我的更改
- 我需要做一些不相关的工作,所以我创建并签出分支 B
- 我在分支 B 上创建了更多提交并推送
- 我去创建一个 PR 和...哎呀。我从分支 A 创建了分支 B,所以突然间我的 PR 中有了来自分支 A 的所有这些不相关的提交。我需要从主分支创建分支 B。
只是想知道最好的工作流程是什么。当然,我可以删除分支 B,重新创建它并复制我的提交,但这看起来很乏味。变基不是一种选择,因为我已经推送到远程仓库。也许我可以还原从分支 A 转移到 B 的所有提交?也许我应该创建一个别名,在创建分支之前检查 main?
最简单的解决方案:变基到
git rebase
有 onto 模式来做你想做的事:
git rebase --onto main A B
将从 A 中取出 B 并将其变基到 main。
如果在 运行 执行此操作时已检出 B,则无需在 rebase 命令行中指定它。
Cherry Pick 选项 您也可以使用 cherry pick 操作。
在正确的地方创建一个新分支,从 B 中挑选所有提交到它上面,然后将 B 重置到它。
git checkout main # or where the branch should start from
git checkout -b B-new # pick a new name, you'll need access to both B and B-new
git cherry-pick A..B # cherry pick all commits on B not on A
现在 B-new
是您首先要创建的分支。您可以只使用新名称,或者如果您想保留名称 B
,请将其重置为 B-new
:
git checkout B
git reset --hard B-new
并清理,因为您现在不再需要 B-new
:
git branch -d B-new
但是所有这些都在做 rebase 所做的事情...