Git清理历史记录并在合并后保留提交

时间:2014-12-15 09:38:40

标签: git merge git-branch

在一个项目中,我们的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) 

即删除所有分支但保留历史记录和提交(以供进一步参考)。

提前致谢。

4 个答案:

答案 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树。

https://www.youtube.com/watch?v=f-1u_MTr2Uw

答案 3 :(得分:0)

您可以查看git log mastergit log newbranch - 看起来完全符合您的要求。如果你真的想要删除所有分支和合并并使历史记录清楚,那么使用git rebase --root master会更好。