If I understand it correctly I can simply use the default editor and change pick
to squash
?
Not quite, since there are commits for ISSUE-018
in between the commits for ISSUE-006
. Commits get squashed to the previous commit, so you will also have to reorder the commits in your editor, either to move all of the commits for ISSUE-018
to the end or possibly to the beginning.
Furthermore, the first commit for ISSUE-006
should be pick
ed, not squash
ed.
For example:
pick 5796b58 ISSUE-006: Fix case 1
squash 4d836b2 ISSUE-006: Fix case 2
squash cae225b ISSUE-006: Bump version
squash 0006f82 ISSUE-006: Fix case 3
squash 98263c2 ISSUE-006: Bump version
squash 0e720f9 ISSUE-006: Bump version
squash bc66908 ISSUE-006: Remove comments
squash 49930b9 ISSUE-006: Proper encoding
squash 8f1196e ISSUE-006: Add tests
squash 2bcbfef ISSUE-006: Bump version
pick 8bcc4d4 ISSUE-018 Blahblahblah
pick 6b18711 ISSUE-018 minor changes
pick 0924c16 ISSUE-018 Blahblahblah
Note that simply reordering commits like this can generate conflicts, some of which can be painful to resolve. In the future, if you create a new branch for each issue you may be able to save yourself a headache.
Of course, merging or rebasing those branches can also generate conflicts. But you shouldn't get any if you're just squashing the commits of a branch without any reordering. git merge
also includes a --squash
flag to simplify this workflow during a merge.
Another benefit of keeping your commits in separate branches is that it simplifies merging / pull request submission. Pull requests and merges both operate between branches: you can't create a PR with your current branch that doesn't include changes for both issues.
I would like to do this is because I would like my pull request to be clean and only have a single commit.
Cleanliness is subjective, and in many cases multiple granular commits can be clearer and easier to review than one big commit. A better guideline is to follow the guidelines of the project you're contributing to, so your contributions are consistent with the rest of the project.
Edit: In a comment you mentioned that commits 8bcc4d4
, 6b18711
, and 0924c16
(the ones for ISSUE-018
) already exist in the target branch. In that case you probably want to remove them from this branch, e.g. by doing something like this in your interactive rebase:
pick 5796b58 ISSUE-006: Fix case 1
squash 4d836b2 ISSUE-006: Fix case 2
squash cae225b ISSUE-006: Bump version
squash 0006f82 ISSUE-006: Fix case 3
squash 98263c2 ISSUE-006: Bump version
squash 0e720f9 ISSUE-006: Bump version
squash bc66908 ISSUE-006: Remove comments
squash 49930b9 ISSUE-006: Proper encoding
squash 8f1196e ISSUE-006: Add tests
squash 2bcbfef ISSUE-006: Bump version