Tuesday, 6 December 2011

Coalescing multiple edits into a single bazaar commit

Occasionally, after committing some changes on a bzr branch, I'll come back to it and want to make further changes.

So, I'll have done something like this:

$ bzr commit
$ # Oops! Forgot to update foo.c. Let's do that now...
$ vim src/foo.c
$ bzr status
modified:
  src/foo.c

But rather than creating a second commit for the newest changes, I'll want to combine those new changes and the changes in the latest commit into a single new commit. How do we do this? With bzr its easy:

$ bzr log -l1 > /tmp/commit.log         # save the latest commit log entry
$ bzr shelve --all -m "latest changes"  # save the latest uncommitted changes
$ bzr uncommit --dry-run                # check its going to work
$ bzr uncommit                          # undo the last commit
$ bzr unshelve --dry-run                # check if its going to work
$ bzr unshelve                          # apply the latest changes to the working directory
$ bzr commit                            # create a new commit containing all the changes
                                        # (here we can make use of '/tmp/commit.log')

Job done.

1 comment:

  1. Nice Post, Thanks for your very useful information... I will bookmark for next reference.

    ReplyDelete