52 lines
1.8 KiB
Markdown
52 lines
1.8 KiB
Markdown
---
|
|
title: Local merging and squashing
|
|
date: 2024-12-12
|
|
permalink: daily/2024/12/12/local-squashing
|
|
tags:
|
|
- software-development
|
|
- git
|
|
cta: ~
|
|
snippet: |
|
|
If you want to squash all the commits on your Git branch locally without rebasing, there is a way!
|
|
---
|
|
|
|
Because [I do trunk-based development][0], I typically don't create branches in Git.
|
|
|
|
If I do, I usually want to keep the commit messages, but there are some situations where I want to squash everything into a single commit with a simple message.
|
|
|
|
Typically, I'd do this using a rebase command like `git rebase -i main` and get an output like this, showing the commits:
|
|
|
|
```plain
|
|
pick d21fafc Remove encrypted disk configuration
|
|
pick ffc1296 Update mount location for media directories
|
|
pick 58f645e Add multigrep from TJ's video
|
|
pick bbd5052 Revert "Remove encrypted disk configuration"
|
|
pick 8280c49 Show more generations on boot
|
|
pick d3b0c48 Revert "Add encrypted media drive"
|
|
pick 8cdc6a5 Add paperless-ngx
|
|
pick 73d801d Add Nick Janetakis' `notes` script
|
|
pick 99b6e3b Set options for text files
|
|
```
|
|
|
|
I can change `pick` to `squash` or `fixup` and decide what to do for each commit.
|
|
|
|
`squash` combines the commit with the previous one, including the commit messages.
|
|
|
|
`fixup` uses the previous commit message and discards the current one.
|
|
|
|
Once the file is saved, the rebase is performed and the actions are executed.
|
|
|
|
## There is another way
|
|
|
|
If you don't want any of the commit messages, you can also use `git merge --squash`.
|
|
|
|
This will automatically squash all the commits - ready for you to run `git commit` and provide the final message.
|
|
|
|
There's no option to merge or combine the previous messages, though.
|
|
|
|
If you want to do that, you can still use the rebase approach.
|
|
|
|
If not, use `git merge --squash`.
|
|
|
|
[0]: {{site.url}}/daily/2022/09/20/why-like-trunk-based-development
|