如何在某次提交后拆分分支?

时间:2011-09-06 04:51:38

标签: git branch

我在分支的末尾添加了一些提交,但我已经决定在单独的功能分支中做得更好。

我现在可以创建一个分支并恢复主分支中的更改,但这会创建一个混乱的历史记录,理想情况下我想在推送到远程存储库之前清理它。

有更好的方法:

A-B-C-D-E

为:

A-B-C
     \
      D-E

好像我首先在C正确分支?

3 个答案:

答案 0 :(得分:7)

不确定为什么每个人都想在这里做一个改变。您需要做的就是在当前头部创建一个功能分支,然后将主设备重置回您想要的位置:

git branch feature
git reset --hard HEAD~2

答案 1 :(得分:1)

  1. 关闭HEAD git checkout

    创建新分支

    git checkout master
    git checkout -b branch

    这将创建一个包含master

  2. 所有提交的新分支
  3. 使用交互式git rebase从主服务器中删除提交DE

    git checkout master
    git rebase -i <SHA_A>

    在弹出的编辑器中,删除包含提交DE的行。
    如果您没有更改编辑器,那么它是Vim,所以点击 j 直到您使用提交D,然后输入 d d 删除该行。与提交行E相同。完成后,键入 w q 以关闭编辑器。

  4. 完成!

    可在此处找到VIM快速参考卡:http://tnerual.eriogerg.free.fr/vim.html

答案 2 :(得分:0)

我猜你可以签出提交(git checkout sha),然后从那里进行分支(git checkout -b newbranch)。我没有测试过这个。

编辑:刚刚意识到您希望在提交后将提交移动到新分支。我相信你想要研究的是git rebase