From: Junio C Hamano Date: Sun, 16 Mar 2008 03:56:03 GMT Subject: Re: [PATCH] rebase [--onto O] A B: omit needless checkout Message-ID: <7vmyozl3u4.fsf@gitster.siamese.dyndns.org> In-Reply-To: <20080315222140.GE24845@ins.uni-bonn.de> Ralf Wildenhues writes: > Hello Junio, > > * Junio C Hamano wrote on Sat, Mar 15, 2008 at 09:42:11PM CET: >> This teaches "git rebase [--onto O] A B" to omit an unnecessary checkout >> of branch B before it goes on. > >> * Almost untested as I do not use this form very often. Feedback would >> be good. > > Nice, and seems to do exactly what I meant. Actually the more important > speedup gained from this change is that files that have changed in the > non-common history of A but not in that of B, preserve their old time > stamps, so the rebuild of my bugfix topic B after having built master > is really quick now. Actually, you would need this on top. Otherwise $ git rebase master my-topic~3 would misbehave. --- git-rebase.sh | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/git-rebase.sh b/git-rebase.sh index 9273852..bd55ef6 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -320,7 +320,8 @@ case "$#" in branch_name="$2" switch_to="$2" - if branch=$(git rev-parse --verify "refs/heads/$2" 2>/dev/null) + if git show-ref --verify --quiet -- "refs/heads/$2" && + branch=$(git rev-parse --verify "refs/heads/$2" 2>/dev/null) then head_name="refs/heads/$2" elif branch=$(git rev-parse --verify "$2" 2>/dev/null)