使用干净的提交历史从分支创建一个新分支

时间:2014-12-08 01:00:42

标签: git

我有一个分支,它有许多不必要的提交,所以我想从它分支到一个干净的历史版本。

这是一个例子:

Master:
commit1
commit2
commit3

BranchB:
commitB1
commitB2
commitB3
commitB4
commitB5
commitB6

After merge:
commit1
commit2
commit3
commitB1
commitB2
commitB3
commitB4
commitB5
commitB6

而不是我希望有这样的东西:

commit1
commit2
commit3
commitB6

是否可以克隆分支B中的所有代码(提交B6后的状态)并使用新的提交消息将其复制到新的分支C?

3 个答案:

答案 0 :(得分:0)

git checkout master
git checkout -b branchc
git merge --no-ff branchb

然后合并提交将来自b1-b6的branchb的更改包含在master的顶部。

答案 1 :(得分:0)

从当前master

创建一个新分支
git checkout -b BranchC

执行rebase交互并删除您不想要的提交

git rebase -i commit3

在rebase交互式编辑器中,它将如下所示

pick commit3
pick commitB1
pick commitB2
pick commitB3
pick commitB4
pick commitB5
pick commitB6

删除您不想要的提交。编辑器可能看起来像这样。

pick commit3
pick commitB6

保存并退出。

希望commitB6不依赖于commitB1 .. commitB5的更改。否则你必须解决冲突。

答案 2 :(得分:-1)

你也可以这样做,一个挑选

git checkout master
git checkout -b branchc
git cherry-pick commitB6