在一个项目中,我们的 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 master
和git log newbranch
- 这将完全符合您的要求。如果你真的想删除所有分支和合并并做历史,最好使用 git rebase --root master
.