如何从错误的分支而不是主分支创建分支中恢复

How to Recover from Creating a Branch from the Wrong Branch Instead of Main

我发现自己经常遇到 Git 的情况:

  1. 我从主分支创建并签出分支 A
  2. 在分支 A 上,我做了一些工作,创建了一些提交等,然后推送我的更改
  3. 我需要做一些不相关的工作,所以我创建并签出分支 B
  4. 我在分支 B 上创建了更多提交并推送
  5. 我去创建一个 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 所做的事情...