【问题标题】:Move some commits to another branch将一些提交移动到另一个分支
【发布时间】:2013-03-17 12:04:01
【问题描述】:

我只有一个分支有 git repo

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

我想将提交 B、C 和 D 拆分到另一个名为 develop 的分支

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

最简单的方法是什么?无需关心远程回购。 cherry-pick 是否只是将提交复制到另一个分支?我认为rebase 是必需的,但我以前没有使用过它,我想在第一次尝试时就拥有它:)

有一些相关的问题,但这些问题没有最后一次提交 E 需要处理。

【问题讨论】:

  • 如果 E 比 D 新,你就不能像你做的那样昏昏沉沉。提交必须按创建时间排序。

标签: git


【解决方案1】:

这两个命令应该可以解决问题:

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

【讨论】:

  • First, rewinding head to replay your work on top of it... 尝试变基时。我应该在哪个分支或提交?
  • 我已经编辑了我的帖子,请立即尝试。做rebase时你应该在master分支上。
【解决方案2】:

我认为这并不完全可能,你想要什么。但这样做的结果几乎是一样的:

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

这是创建开发分支的方法。 Anyvaw 一个分支指向一个提交。或者,如果您更喜欢这个,分支只是提交图中的提交的别名。想象一下,我们可以在提交图中考虑一条道路,但实际上我认为它并没有达到。 (提交图的真实边缘在您提交(旧提交和新提交之间的边缘)或合并两个提交(新提交和两个“父”提交之间的边缘)时创建)

查看结果:

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

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

希望能帮到你。

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2022-10-19
    • 2011-03-11
    • 2015-08-08
    • 2011-11-24
    相关资源
    最近更新 更多