当前位置:  开发笔记 > 开发工具 > 正文

是否有可能追溯将一组提交转换为分支?

如何解决《是否有可能追溯将一组提交转换为分支?》经验,为你挑选了3个好方法。

说我有一个git存储库,我一直在做master,我可以追溯创建一个分支.例如:

A - B - C - A1 - D - A2 - E.

我想让它看起来像这样:

A - A1 - A2   
\           \   
B - C - D - E

具体的用例是当我在旧版本分支中挑选了一堆提交时,它需要进入多个旧版本,我不想重复所有这些修订的樱桃选择.

从本质上讲,它首先作为一个功能或主题分支是好的,但不是那样创建的.



1> alltom..:

如果您希望修订版XXX之后的所有提交都发生在分支中,我发现这比其他提议的方法容易得多.

$ git branch fixes       # copies master to new branch
$ git reset --hard XXX   # resets master to XXX

这在git的帮助页面中描述了reset"撤消提交,使其成为主题分支".


_XXX_的一个有用的值只是`origin/master`:假设你在`master`分支上,接受所有未提交的提交并将它们视为分支.你也可能想在最后"git checkout fixes"实际切换回你的新分支.
我本周第二次回到这个答案.我希望我能给@alltom另一票!

2> Bombe..:

当然可以.(使用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-branchnew-branch2获得你想要的结构并删除你的旧分支.

当然Dustin所说的仍然存在:提交的哈希值会发生变化,所以如果你还没有发布你的更改,你应该这样做.



3> Dustin..:

你不能透明地这样做,因为哈希必须改变,但你基本上只需要分支HEAD和rebase -i两个分支来删除相应的更改.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有