From: Wincent Colaiuta Date: Tue, 02 Feb 2010 20:58:45 GMT Subject: Re: [BUG] - "git commit --amend" commits, when exiting the editor with no changes written Message-ID: <394FB581-C9B9-40AB-AFB6-39B68ED5BEAD@wincent.com> In-Reply-To: <76c5b8581002021247j6df8f609ld9e5d87a060a5423@mail.gmail.com> El 02/02/2010, a las 21:47, Eugene Sajine escribió: > On Tue, Feb 2, 2010 at 3:27 PM, Avery Pennarun > wrote: >> On Tue, Feb 2, 2010 at 3:14 PM, Jacob Helwig >> wrote: >>> On Tue, Feb 2, 2010 at 12:07, Eugene Sajine >>> wrote: >>>> When git commit --amend is executed it fires up vi so i can >>>> change the >>>> commit message. If I have something staged, then when I'm exiting >>>> vi >>>> using :q (without doing/writing any changes), it still commits >>>> everything staged with old message. >>>> >>>> I believe it should actually abort amending and return to the state >>>> before the "git commit --amend" was issued. >>> >>> I don't think this is actually the right way to go. A _very_ common >>> use case for "commit --amend" is to add things to the previous >>> commit, >>> without changing the commit message at all. Yes, you can avoid >>> having >>> to fire up the editor at all in this case, but it's still a >>> perfectly >>> valid thing to want to do. >> >> I agree and I do this all the time. However, I've also done it >> accidentally before I learned the "remove the commit message and >> save" >> trick. >> >> Perhaps what's really missing is more documentation of how to >> "unamend" if you change your mind :) I happen to know about "git >> reset HEAD@{1}" but it's not terribly obvious. >> >> Avery >> > > Well, i understand this logic but it seems to me that the issue is a > little bit deeper than that. > I just realized that the "rebase -i" is doing the same thing. > > If you're just exiting the vi using :q without writing changes it will > perform rebase! I'm 100% sure it is not OK. As has already been pointed out, an extremely common workflow for "git commit --amend" is to include additional changes that were accidentally overlooked in the initial commit, and no changes are made to the commit message. Changing the behavior would break that perfectly reasonable, widely- practised workflow, and _that_ would be 100% not ok. Lucky for you, you've already been provided with two means of aborting (empty commit message, and non-zero editor exit), so you might as well start getting used to them. Wincent