Chris Webb <chris@xxxxxxxxxxxx> writes: > +do_pick () { > + if test "$(git rev-parse HEAD)" = "$squash_onto" The idea to create a sentinel root upfront and special case it here is a good one. > + then I am not quite sure what is going on in this "then" clause. > + git commit --allow-empty --allow-empty-message --amend \ > + --no-post-rewrite -n -q -C $1 && At this point, nobody touched the empty sentinel root yet; you rewrite its log message and authorship using the picked commit. > + pick_one -n $1 && And then you create a new commit that records the update "$1" does relative to its parent (this hopefully only contains additions -- is it sensible to die-with-patch if it doesn't?), making sure that it does not fast-forward. Does this always make the result a root commit? If "$1" has parents, wouldn't it become a child of the commits its parents were rewritten to (if any) in pick_one_preserving_merges() that is called from pick_one? > + git commit --allow-empty --allow-empty-message \ > + --amend --no-post-rewrite -n -q -C $1 || And then you rewrite the log and authorship of that one. In short, my questions are: (1) what is the purpose of the first "commit --amend" to update the sentinel root commit? (2) Is the purpose of "pick_one -n" done here to create a root commit? Does it always do so correctly? > diff --git a/git-rebase.sh b/git-rebase.sh > index e616737..bde2be8 100755 > --- a/git-rebase.sh > +++ b/git-rebase.sh > @@ -31,7 +31,7 @@ SUBDIRECTORY_OK=Yes > OPTIONS_KEEPDASHDASH= > OPTIONS_SPEC="\ > git rebase [-i] [options] [--onto <newbase>] [<upstream>] [<branch>] > -git rebase [-i] [options] --onto <newbase> --root [<branch>] > +git rebase [-i] [options] [--onto <newbase>] --root [<branch>] > git-rebase [-i] --continue | --abort | --skip > -- > Available options are > @@ -364,6 +364,11 @@ and run me again. I am stopping in case you still have something > valuable there.' > fi > > +if test -n "$rebase_root" && test -z "$onto" > +then > + test -z "$interactive_rebase" && interactive_rebase=implied > +fi > + This makes "git rebase --root" without $onto imply "-i", which makes sense, but it was a bit unexpected (it wasn't in the proposed log message). -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html