On Tue, May 10, 2016 at 06:14:21AM -0400, Robert P. J. Day wrote: > i can remove the first line and save to get: > > ... X <--- B' <--- C' <--- D' <--- E' (HEAD) > > is there a way to do that without having to fire up an interactive > rebase session? Provided you never have rebase/merge/cherry-pick conflicts, yes. I could also be cheap and suggest using ed as your $VISUAL/$EDITOR, and providing an ed script! > oh, wait, can't i just rebase B onto X? effectively, i want to > reproduce the work from B to E as if it originated at X; isn't that > just a regular rebase? thoughts? Yes it is. A tad roundabout since you're being *indirect* about it, instead of explicit about the commits to drop. I presume you mean to use --onto (git-rebase(1)). Right? Not sure if you could achieve the same with --root or --fork-point (git-rebase(1)). Wouldn't be a long shot from a quick scan of the man. Were you thinking of something like this? $ cd /tmp $ mkdir foo $ cd foo $ git init Initialized empty Git repository in /tmp/foo/.git/ $ for c in x a b c d e; do echo $c > f; git add f; git commit -m $c; done [master (root-commit) a204b8b] x 1 file changed, 1 insertion(+) create mode 100644 f [master 1f1383e] a 1 file changed, 1 insertion(+), 1 deletion(-) [master e70bbdd] b 1 file changed, 1 insertion(+), 1 deletion(-) [master 38787d9] c 1 file changed, 1 insertion(+), 1 deletion(-) [master 7df5863] d 1 file changed, 1 insertion(+), 1 deletion(-) [master bc3c996] e 1 file changed, 1 insertion(+), 1 deletion(-) $ git rebase --onto :/x :/a :/e First, rewinding head to replay your work on top of it... Applying: b Using index info to reconstruct a base tree... M f Falling back to patching base and 3-way merge... Auto-merging f CONFLICT (content): Merge conflict in f error: Failed to merge in the changes. Patch failed at 0001 b The copy of the patch that failed is found in: .git/rebase-apply/patch When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort". $ echo $? 128 $ git diff diff --cc f index 587be6b,6178079..0000000 --- a/f +++ b/f @@@ -1,1 -1,1 +1,5 @@@ ++<<<<<<< a204b8bb4f2f12157648532a598b330e92d0f706 +x ++======= + b ++>>>>>>> b $ git mergetool Merging: f Normal merge conflict for 'f': {local}: modified file {remote}: modified file $ git rebase --continue Applying: b Applying: c Applying: d Applying: e $ git log --oneline --graph --decorate --all * 75ab185 (HEAD) e * 8226637 d * 8b40930 c * deb4067 b | * bc3c996 (master) e | * 7df5863 d | * 38787d9 c | * e70bbdd b | * 1f1383e a |/ * a204b8b x Who the heck said you needed tig? I never got it, especially not the colours.