Re: Git feature request: --amend older commit

2012-08-18 Thread Junio C Hamano
Jared Hance jaredha...@gmail.com writes:

[administrivia: do not deflect a direct response to you away by
using mail-followup-to header, thanks]

 On Fri, Aug 17, 2012 at 11:47:49AM -0400, George Spelvin wrote:
 Something like git commit --fixup HEAD~3, where git commit --fixup HEAD
 would be equivalent to git commit --amend.

Yes, as an end-user facing command set, git commit --amend HEAD~3 would
not be a bad addition.

 Such a simple task shouldn't require an interactive command.

In some cases, yes.  But the devil is in the details, and whoever
wants to work on must be prepared to see cases where the remainder
of the commits after rewriting an older commit will not replay
cleanly on top of it.  At that point, it won't be a simple task
anymore.  At least, it must make it clear what the user should do
when commit --amend HEAD~3 (and subsequent rebuilding of HEAD~2,
HEAD~1 and HEAD on top of the amended result) needs a help from the
user to resolve conflicts.  It may be just the matter of mentioning
from here on, follow the procedure you would use when you are
running 'rebase -i', if the chosen mechanism to implement the
sequencing behind the commit --amend HEAD~3 UI is rebase -i.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Git feature request: --amend older commit

2012-08-17 Thread Michael Haggerty

On 08/17/2012 05:47 PM, George Spelvin wrote:

With git's commit frequently style, I often find that I end up with a
commit that includes a typo in a comment or I forgot one call site when
updating functions or something.

And it's a few commits later before I notice the simple oops.

This is of course fixable by making a commit, rebase -i HEAD~4 (or whatever),
and marking the fixup for squashing into the previous commit.

But it would be really handy if there were a one-step command for doing this.

Something like git commit --fixup HEAD~3, where git commit --fixup HEAD
would be equivalent to git commit --amend. [...]


Have you tried git rebase --autosquash?  It does part of what you are 
asking for and additionally allows multiple fixup commits to be queued 
up and processed in a single rebase.


Michael

--
Michael Haggerty
mhag...@alum.mit.edu
http://softwareswirl.blogspot.com/
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Git feature request: --amend older commit

2012-08-17 Thread Jared Hance
On Fri, Aug 17, 2012 at 11:47:49AM -0400, George Spelvin wrote:
 Something like git commit --fixup HEAD~3, where git commit --fixup HEAD
 would be equivalent to git commit --amend.

Aside from the ways others mentioned on how to do this, I think that a
better interface if this were to be added would be to make the commit an
optional parameter of --amend. Adding another parameter which
effectively does a superset of --amend sounds unnecessary.

I often want to amend a commit, but its simply too much work, so I
usually commit it marking the message as something like
fixup!  Then, before I push, I make sure to rebase all of
the commits marked as fixups. Clearly autosquash does this, but to have
to override the editor as true is just a hassle.

I feel like this is a common enough need that it deserves more first
class support than relying on the rebase command and then using true as
an editor. Either it should be supported natively or it should be
possible to autosquash a rebase without --interactive, since at present
--autosquash requires --interactive, which isn't nice for when the user
does not want the rebase to be interactive. Such a simple task shouldn't
require an interactive command.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html