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



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

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

提前谢谢。

我会

对此发表评论,但我还没有足够的声誉。 你能澄清一些事情吗 - 提交 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 或其他一些本地分支),这样如果出现问题,我可以git reset --hard <pointer-to-previous-master>。 新分支也是如此。

完成后,主分支和新分支上一切正常后,您可以使用 git branch -D 删除分支 1-3

$ 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

我创建了一个截屏视频来回答这个问题。希望对您有所帮助。

它演示了使用 SmartGit Git 客户端创建基于复杂树的直接 Git 树。

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

您可以检查git log mastergit log newbranch - 这将完全符合您的要求。如果你真的想删除所有分支和合并并做历史,最好使用 git rebase --root master .

最新更新