在一个项目中,我们的git日志就像
1--2--3----------------------------12-- (master)
\-4--5--------8---9------11-/ \ (branch1)
\--6-------/---10-/ \ (branch2)
\-7-------/ \ (branch3)
\-13 (newbranch)
我希望:
1--2--3--4--5--6--7--8--9--10--11--12-- (master)
\-13 (newbranch)
即删除所有分支但保留历史记录和提交(以供进一步参考)。
提前致谢。
答案 0 :(得分:3)
我会发表评论,但我还没有足够的声誉。你能澄清一下 - 提交9到12次合并提交吗?如果是,为什么要在线性历史记录中包含合并提交?省略合并提交不是线性历史的要点吗?
编辑:无论如何,试试这个:
1)弄清楚提交1的提交哈希。假设它是5678。
2)git checkout master
。然后执行git rebase -i 5678
。你会得到一个提示。重新排序提交1到12.然后保存并退出编辑器。
3)git checkout newbranch
。然后执行git rebase master
。
重写历史总是有风险的,所以我确保在我尝试这个之前有另一个分支指向master(origin / master或其他一些本地分支),这样如果出现问题,我可以{{1 }}。同样适用于newbranch。
完成后,master和newbranch上的所有内容都很好看,您可以使用git reset --hard <pointer-to-previous-master>
删除分支1-3。
答案 1 :(得分:0)
$ git checkout -b new/master 3 (3 should be replaced with the commit sha1 of 3)
$ git cherry-pick 4 (4 should be replaced with the commit sha1 of 4)
$ git cherry-pick 5
$ git cherry-pick 6
...
$ git cherry-pick 12
$ git checkout -b new/newbranch
$ git cherry-pick 13
$ git branch -D master
$ git branch -D branch1
$ git branch -D branch2
$ git branch -D branch3
$ git branch -D newbranch
$ git branch -m new/master master
$ git branch -m new/newbranch newbranch
答案 2 :(得分:0)
我创建了一个回答此问题的截屏视频。希望它能帮到你。
它演示了使用SmartGit Git客户端创建基于复杂树的直接Git树。
答案 3 :(得分:0)
您可以查看git log master
和git log newbranch
- 看起来完全符合您的要求。如果你真的想要删除所有分支和合并并使历史记录清楚,那么使用git rebase --root master
会更好。