I think the answer is simple.  Simply set your email using whoami like the bzr 5 minute guide says:<br><br><a href="http://doc.bazaar-vcs.org/latest/en/mini-tutorial/index.html#introducing-yourself">http://doc.bazaar-vcs.org/latest/en/mini-tutorial/index.html#introducing-yourself</a><br>
<br>and then keep committing.  In bzr (at least in how I use it) a commit is used in the same sense that it is in a database transaction.  Namely, once you commit, there is no going back.  <br><br>Once you accept that this is what &quot;commit&quot; means, your hypothetical of &quot;what if I had to change 20 commits&quot; doesn&#39;t make sense.  Again, the bottom line is that the conceptual model of bzr is different from git (at least in this area).<br>
<br>Cheers,<br><br>Brian<br><br><br><br><div class="gmail_quote">On Thu, Jul 16, 2009 at 1:56 PM, Ondrej Certik <span dir="ltr">&lt;<a href="mailto:ondrej@certik.cz">ondrej@certik.cz</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="h5">On Thu, Jul 16, 2009 at 2:30 PM, Ondrej Certik&lt;<a href="mailto:ondrej@certik.cz">ondrej@certik.cz</a>&gt; wrote:<br>
&gt; On Thu, Jul 16, 2009 at 2:27 PM, Ondrej Certik&lt;<a href="mailto:ondrej@certik.cz">ondrej@certik.cz</a>&gt; wrote:<br>
&gt;&gt; On Thu, Jul 16, 2009 at 12:33 PM, Ondrej Certik&lt;<a href="mailto:ondrej@certik.cz">ondrej@certik.cz</a>&gt; wrote:<br>
&gt;&gt;&gt; On Thu, Jul 16, 2009 at 12:06 PM, Ville M. Vainio&lt;<a href="mailto:vivainio@gmail.com">vivainio@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt; On Thu, Jul 16, 2009 at 8:39 PM, Ondrej Certik&lt;<a href="mailto:ondrej@certik.cz">ondrej@certik.cz</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Ok, so I will keep committing. But here is a real problem. I commitetd<br>
&gt;&gt;&gt;&gt;&gt; with an email address ondrej@crow by a mistake and I would like to use<br>
&gt;&gt;&gt;&gt;&gt; my real address, before you merge it in. In other words, I need to fix<br>
&gt;&gt;&gt;&gt;&gt; last two commits. How can I do that?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; If you don&#39;t mind some low-tech legwork, you can do a new branch and<br>
&gt;&gt;&gt;&gt; get your changes there by bzr diff + standard &#39;patch&#39; app.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Well, what are my options?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 1) have ondrej@crow in the ipython history<br>
&gt;&gt;&gt; 2) use the old good patch app.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Well, I do want to fix my email address. Imagine I noticed after<br>
&gt;&gt;&gt; committing ~20 patches. I would not be happy to rework everything<br>
&gt;&gt;&gt; using &quot;patch&quot;. For comparison, with git, I would do:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; git rebase -i HEAD~20      # assuming I have 20 patches to fix<br>
&gt;&gt;&gt; # vim fires up, I change &quot;e&quot; next to each patch I want to edit and then<br>
&gt;&gt;&gt; git --amend --author=&quot;Ondrej Certik &lt;my correct email address&gt;&quot;<br>
&gt;&gt;&gt; git rebase --continue<br>
&gt;&gt;&gt; # repeat the last two commands 20 times<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; and I am done. Let me search the internet, there must be some better<br>
&gt;&gt;&gt; way than to do a new branch and rework everything from scratch.<br>
&gt;&gt;<br>
&gt;&gt; Ok, so there is a better way.<br>
&gt;&gt;<br>
&gt;&gt; First I did &quot;bzr whoami &lt;correct name+email&gt;&quot; and this fixes the email<br>
&gt;&gt; in the last commit:<br>
&gt;&gt;<br>
&gt;&gt; bzr uncommit<br>
&gt;&gt; bzr commit -m &quot;set_trace() moved from __init__.py to ipapi.py&quot;<br>
&gt;&gt;<br>
&gt;&gt; Yes, I have to recommit the log (git allow you to reuse the log of the<br>
&gt;&gt; old, deleted, commit), but it&#39;s already a big step forward.<br>
&gt;&gt;<br>
&gt;&gt; However, now I have this problem:<br>
&gt;&gt;<br>
&gt;&gt; $ bzr push<br>
&gt;&gt; Using saved push location:<br>
&gt;&gt; bzr+ssh://<a href="http://bazaar.launchpad.net/%7Eipython-dev/ipython/set_trace/" target="_blank">bazaar.launchpad.net/~ipython-dev/ipython/set_trace/</a><br>
&gt;&gt; bzr: ERROR: These branches have diverged.  Try using &quot;merge&quot; and then &quot;push&quot;.1<br>
&gt;&gt;<br>
&gt;&gt; I just changed my email. Git has &quot;git push -f&quot;, which rewrites the<br>
&gt;&gt; remote branch. Ok, let me dig some more into this.<br>
&gt;<br>
&gt; Very cool, now this works!<br>
&gt;<br>
&gt; $ bzr push --overwrite<br>
&gt; Using saved push location:<br>
&gt; bzr+ssh://<a href="http://bazaar.launchpad.net/%7Eipython-dev/ipython/set_trace/" target="_blank">bazaar.launchpad.net/~ipython-dev/ipython/set_trace/</a><br>
&gt; Pushed up to revision 1176.<br>
&gt;<br>
&gt; So now the only problem is to figure out how to fix the 2nd commit from top.<br>
<br>
</div></div>Ok, so I created a new branch set_trace2 and then just merged one<br>
commit from set_trace. When I did &quot;bzr merge -r 1175 ../set_trace&quot;, it<br>
merged it, but &quot;bzr diff&quot; still shows the diff. So I committed it and<br>
now &quot;bzr log&quot; shows two commits, the old one and my new one. So I am<br>
confused, I thought that a merge would just take the commit and put it<br>
on top of my set_trace2 branch. I think I should have used &quot;bzr pull&quot;.<br>
So I created set_trace3 and used &quot;bzr pull&quot;, now it works.<br>
<br>
I applied my trick above with changing the email (havig to copy the<br>
log message by hand sucks, but it works). Unfortunately, I am not able<br>
to pull the next commit anymore:<br>
<br>
$ bzr pull -r 1176 ../set_trace<br>
bzr: ERROR: These branches have diverged. Use the merge command to<br>
reconcile them.<br>
<br>
So that&#39;s a real problem now. If I use merge, it will merge it but it<br>
will be a mess. So let&#39;s use patch, that works nice (except that I<br>
have to commit the log by hand once again).<br>
<br>
Ok, so here is my reworked branch:<br>
<br>
<a href="https://code.edge.launchpad.net/%7Eipython-dev/ipython/set_trace" target="_blank">https://code.edge.launchpad.net/~ipython-dev/ipython/set_trace</a><br>
<br>
<br>
So this worked fine. But if I had 20 patches to fix, I am afraid there<br>
is no way to do it. Working with 20 patches by hand and &quot;patch&quot;, and<br>
copy &amp; pasting 20 log messages, well, that would be a pain.<br>
<font color="#888888"><br>
Ondrej<br>
</font></blockquote></div><br>