将一些提交移动到另一个分支

3

我只有一个分支的 git 仓库

A-B-C-D-E (master)

我希望将提交记录B、C和D拆分到名为develop的另一个分支中。
A-E (master)
 \
  B-C-D (develop)

什么是最简单的方法?不需要担心远程存储库。cherry-pick只是将提交复制到另一个分支吗?我认为需要使用rebase,但我以前没有使用过,我希望第一次就做对:)
有一些相关问题,但这些问题没有处理最后提交E。

如果E比D更新,你不能像之前那样绘制。提交必须按创建时间排序。 - Kovge
2个回答

3
这两个命令应该可以解决问题:
git branch develop D #create develop branch

git rebase --onto A D #make everything after D sit on top of A

请注意,运行rebase命令时几乎肯定会出现一些冲突。修复后,只需运行git add .git rebase --continue即可。

首先,将头倒回以重放您的工作并在其之上进行重新基础操作... 我应该在哪个分支或提交中? - Kuitsi
我已经编辑了我的帖子,请现在尝试。在执行变基操作时,您应该处于主分支上。 - niculare

0

我认为你想要的并不完全可能实现。但是这样做的结果几乎相同:

git checkout D  # checkout (step) to the D commit /this does not modify the master branch/
git branch develop  # create develop branch, based on D
git checkout develop # now you stand on D commit
git push origin develop # push the new branch to repo, named origin
git checkout master # now you stand on E commit again

这是创建你的开发分支的方式。任何分支都指向一个提交。或者如果你喜欢更好的话,分支只是提交图形中提交的别名。想象一下我们可以在提交图中考虑一条路,但实际上我认为这并不重要。(提交图的真实边缘是在你提交时创建(旧提交和新提交之间的边缘)或者合并两个提交时创建(新提交和两个“父”提交之间的边缘))

看一下结果:

git log --graph --decorate --pretty=oneline --abbrev-commit --all

   A-B-C-D-E (master)
         \-D (develop)

希望能够帮到你。


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