If a Git repository structure looks like this:
master: A-C
dev: \B-D-E
is it possible to merge the development branch into master so that only one commit is added to master, containing all of the changes found in all of the commits in the development branch. So the above structure would merge to look like this:
master: A-C-E'
The E'
commit would contain all of the changes from the development branch and only the latest commit message, adding the new feature to master in one tidy commit.
Is this possible in Git? I'm hoping to be able to keep the history of a GitHub repository tidy, as my development branches often contain early commits which are unfinished, unpolished and unfit for human consumption.
The merge part should be easy (see "How to use git-merge --squash
?"):
git checkout master
git merge --squash dev
You might have to adjust the commit message though:
git commit --amend -m "<commit message from E>"
(you have other options when doing the merge)
You can achieve this, though it won't be a merge. (Remember: A merge commit has 2 or more parents. E'
only has one parent, though: C
.)
git rebase -i master dev
pick
to squash
for all but the
first line, then save the file and close the editor.E'
, then save the file and close the editor.Then
git checkout master
git merge dev --ff-only
git branch -d dev
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With