diff options
author | Johannes Sixt <johannes.sixt@telecom.at> | 2007-07-04 22:09:10 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-07-04 21:12:39 -0700 |
commit | 1308c17b3e6bd3f5636f5b9bcadb2fbdf559009d (patch) | |
tree | ed1ac272833101767363d37c4a5a49d36f4db23c /git-rebase.sh | |
parent | d97bc5de929e525add9977a9c1ab3834b8c04657 (diff) | |
download | git-1308c17b3e6bd3f5636f5b9bcadb2fbdf559009d.tar.gz |
Allow rebase to run if upstream is completely merged
Consider this history:
o--o-...-B <- origin
\ \
x--x--M--x--x <- master
In this situation, rebase considers master fully up-to-date and would
not do anything. However, if there were additional commits on origin,
the rebase would run and move the commits x on top of origin.
Here we change rebase to short-circuit out only if the history since origin
is strictly linear. Consequently, the above as well as a history like this
would be linearized:
o--o <- origin
\
x--x
\ \
x--M--x--x <- master
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-rebase.sh')
-rwxr-xr-x | git-rebase.sh | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/git-rebase.sh b/git-rebase.sh index c590661179..7a02f2975d 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -305,10 +305,12 @@ branch=$(git rev-parse --verify "${branch_name}^0") || exit # Now we are rebasing commits $upstream..$branch on top of $onto -# Check if we are already based on $onto, but this should be -# done only when upstream and onto are the same. +# Check if we are already based on $onto with linear history, +# but this should be done only when upstream and onto are the same. mb=$(git merge-base "$onto" "$branch") -if test "$upstream" = "$onto" && test "$mb" = "$onto" +if test "$upstream" = "$onto" && test "$mb" = "$onto" && + # linear history? + ! git rev-list --parents "$onto".."$branch" | grep " .* " > /dev/null then echo >&2 "Current branch $branch_name is up to date." exit 0 |