开发者

Clearing history: Squashing A to B and D to E commits in Git

I have an ugly history on my repo and I want to streamline-it a little bit. From what I've read, git rebase would be the tool I should use. What I want to do is:

Turn this:

A--------------------------I (master)
 \                        /
  B--C-------------G--H--/ (development)
      \           /
       D--E--开发者_如何学C----/ (feature-1)
           \    /
            F--/ (feature-2)

Into this:

A-BCDEFH--I (master)

After the commit "I", I have other commits in the same form, so I would like my final history to look like:

A-BCDEFH--I--KLMNO-P (master)

Any pointers in how to accomplish this?

EDIT: Please note that in this example, D and F are not merge commits - they are standard commits, so none of them should dissapear from the history (although the merge commits, G and I should).


You can accomplish the first step with this:

$ git checkout -b new-master master
$ git rebase --onto A A new-master

Where A is the commit identifier for the A commit in your graph.

This will create a new branch new-master that will ultimately wind up in the shape you want master in (merge commits that introduce no changes of their own will be dropped from the history). To port over the other branches, check them out one-by-one and issue git rebase --onto new-master master branchname.

When you are satisfied with the changes, you can update the master branch and delete new-master:

$ git checkout master
$ git reset --hard new-master
$ git branch -d new-master
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜