说我有一个git存储库,我一直在做master,我可以追溯创建一个分支.例如:
A - B - C - A1 - D - A2 - E.
我想让它看起来像这样:
A - A1 - A2 \ \ B - C - D - E
具体的用例是当我在旧版本分支中挑选了一堆提交时,它需要进入多个旧版本,我不想重复所有这些修订的樱桃选择.
从本质上讲,它首先作为一个功能或主题分支是好的,但不是那样创建的.
如果您希望修订版XXX之后的所有提交都发生在分支中,我发现这比其他提议的方法容易得多.
$ git branch fixes # copies master to new branch $ git reset --hard XXX # resets master to XXX
这在git的帮助页面中描述了reset
"撤消提交,使其成为主题分支".
当然可以.(使用Git,没有什么比你无论如何都做不了.:)
git checkout -b new-branch hash-of-A git cherry-pick hash-of-A1 git cherry-pick hash-of-A2
这将从提交开始创建一个新分支A
.然后再次返回相同的提交,创建另一个分支:
git checkout -b new-branch2 hash-of-A git cherry-pick hash-of-B git cherry-pick hash-of-C git cherry-pick hash-of-D git cherry-pick hash-of-E git merge new-branch
现在你只需要合并new-branch
并new-branch2
获得你想要的结构并删除你的旧分支.
当然Dustin所说的仍然存在:提交的哈希值会发生变化,所以如果你还没有发布你的更改,你应该这样做.
你不能透明地这样做,因为哈希必须改变,但你基本上只需要分支HEAD和rebase -i两个分支来删除相应的更改.