git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/2] git-rebase--interactive: auto amend only edited commit

From
Dmitry Potapov <dpotapov@gmail.com>
Date
Sep 9, 2008, 07:00 UTC
Message-ID
<20080909070055.GB28210@dpotapov.dyndns.org>
In-Reply-To
<7viqt6cg4t.fsf@gitster.siamese.dyndns.org>
On Mon, Sep 08, 2008 at 05:33:22PM -0700, Junio C Hamano wrote:
Show 15 quoted lines
> I may not be reading your patch correctly; I am confused by what you are
> trying to do.
> 
> > diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
> > index 5b2b1e5..84721c9 100755
> > --- a/git-rebase--interactive.sh
> > +++ b/git-rebase--interactive.sh
> > @@ -284,7 +284,7 @@ do_next () {
> >  		pick_one $sha1 ||
> >  			die_with_patch $sha1 "Could not apply $sha1... $rest"
> >  		make_patch $sha1
> > -		: > "$DOTEST"/amend
> > +		echo $sha1 > "$DOTEST"/amend
> 
> You record the $sha1 from the TODO file.
Oops... I should have gone to bed instead of sending this patch...
> 
> Perhaps you wanted to record the value of the HEAD in the first hunk?
You are asbolutely right. It should be:
	git rev-parse --verify HEAD > "$DOTEST"/amend
> 
> How would this change interact with the workflow of splitting existing
> commits, described at the end of git-rebase documentation?

It is not affected, because accordingly to the documentation, you commit all your changes "until your working tree is clean."

However, if you forgot to commit your changes, without my patch you may lose some of your splitting work. Here is the script that demonstrates the problem

-- >8 -- #!/bin/sh

set -e

rm -rf git-test mkdir -p git-test cd git-test

git init for ((i=0;$i<10;i++)) do echo $i; done > foo git add foo git commit -m 'add foo'

sed -e 's/^0$/first line/;s/^9/last line/' < foo > tmp mv tmp foo git add foo git commit -m 'change foo'

echo bar > bar git add bar git commit -m 'more changes'

git log echo '==='

GIT_EDITOR='sed -e '\''s/pick \(.* change foo\)/edit \1/'\'' < "$1" > tmp && mv tmp' git rebase -i HEAD~2
git reset HEAD^
{ echo y; echo n; } | git add -p
git commit -m 'commit chunk 1'

git add foo # If I commit chunk 2 then everything will be fine with and without # my patch # # git commit -m 'commit chunk 2' # # However, if I forgot to commit chunk 2 then without my patch rebase # will lose my work on splitting these chunks! # # With my patch, it will error out: You have uncommitted changes

GIT_EDITOR=cat git rebase --continue

git log -- >8 --

Dmitry
Previous: Junio C HamanoNext: Dmitry Potapov
Message 4 of 12 in “git-rebase-interactive: do not squash commits on abort”
  1. 1/2 git-rebase-interactive: do not squash commits on abortDmitry Potapov, Sep 8, 2008
  2. 2/2 git-rebase--interactive: auto amend only edited commitDmitry Potapov, Sep 8, 2008
  3. Junio C HamanoSep 9, 2008
  4. Dmitry PotapovSep 9, 2008
  5. git-rebase--interactive: auto amend only edited commitDmitry Potapov, Sep 9, 2008
  6. Johannes SixtSep 9, 2008
  7. Dmitry PotapovSep 9, 2008
  8. Junio C HamanoSep 9, 2008
  9. Johannes SchindelinSep 9, 2008
  10. git-rebase-interactive: do not squash commits on abortDmitry Potapov, Sep 9, 2008
  11. Johannes SchindelinSep 10, 2008
  12. Junio C HamanoSep 10, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.