Editing the root commit

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Editing the root commit

From: Chris Webb <hidden>
Date: 2016-06-15 22:54:08

I've recently been polishing up some private code for release, using git
rebase --interactive to expand on some commit messages.

In a couple of cases, I wanted to edit the root commit. (Adding a COPYING
file, for example.) I've been successfully doing this with an explicit

  ROOT=$(git log --pretty=format:%H | tail -n 1)
  git checkout $ROOT
  git commit --amend --message='Initial import modified' # for example
  git rebase --onto HEAD $ROOT master

However, this brought two questions to mind.

The first is whether there's a clever symbolic way to refer to the root of
the current branch, rather than tailing git log output? gitrevisions(7)
doesn't obviously suggest one.

The second question is whether it's possible to use git rebase --interactive
to edit the root commit along with some subsequent ones in one fell swoop?

My fingers half-remember doing something like

  git checkout --orphan rewritten
  git rm -rf
  git rebase --interactive --root --onto rewritten master

a year or so ago, but this now fails (on git 1.7.10) with the somewhat
surprising error

  $ git rebase --root --onto rewritten master
  fatal: Needed a single revision
  Does not point to a valid commit: master

Am I misremembering the recipe here, or has the behaviour changed? It seems
to fail identically with or without --interactive.

Best wishes,

Chris.

Re: Editing the root commit

From: jaseem abid <hidden>
Date: 2016-06-15 22:54:08

On Tue, Jun 19, 2012 at 2:46 PM, Chris Webb [off-list ref] wrote:
I've recently been polishing up some private code for release, using git
rebase --interactive to expand on some commit messages.

In a couple of cases, I wanted to edit the root commit. (Adding a COPYING
file, for example.) I've been successfully doing this with an explicit

 ROOT=$(git log --pretty=format:%H | tail -n 1)
 git checkout $ROOT
 git commit --amend --message='Initial import modified' # for example
 git rebase --onto HEAD $ROOT master

However, this brought two questions to mind.

The first is whether there's a clever symbolic way to refer to the root of
the current branch, rather than tailing git log output? gitrevisions(7)
doesn't obviously suggest one.

The second question is whether it's possible to use git rebase
--interactive
to edit the root commit along with some subsequent ones in one fell swoop?

My fingers half-remember doing something like

 git checkout --orphan rewritten
 git rm -rf
 git rebase --interactive --root --onto rewritten master

a year or so ago, but this now fails (on git 1.7.10) with the somewhat
surprising error

 $ git rebase --root --onto rewritten master
 fatal: Needed a single revision
 Does not point to a valid commit: master

Am I misremembering the recipe here, or has the behaviour changed? It
seems
to fail identically with or without --interactive.
I was trying to do something very similar yesterday. I was cleaning up
a lot of commits with a rebase -i when I figured out that I cant do
that on the root commit.

The man on interactive rebase says,

        Start it with the last commit you want to retain as-is:
        git rebase -i <after-this-commit>

which means root cant be included. Finally I had to settle for some
solution like what you mentioned.

If possible Junio, can a feature be added to include root commit also
to git rebase -i somehow so that a rewrite including root is easier
and more straightforward ?

--
Jaseem Abid
http://jaseemabid.github.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help