diff options
Diffstat (limited to 'git-rebase--interactive.sh')
| -rwxr-xr-x | git-rebase--interactive.sh | 23 | 
1 files changed, 14 insertions, 9 deletions
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 6c8ff0c46a..3b10513806 100755 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -619,25 +619,30 @@ do_rest () {  # skip picking commits whose parents are unchanged  skip_unnecessary_picks () {  	fd=3 -	while read -r line +	while read -r command rest  	do -		command=$(echo "$line" | sed 's/  */ /' | cut -d ' ' -f 1) -		sha1=$(echo "$line"    | sed 's/  */ /' | cut -d ' ' -f 2) -		rest=$(echo "$line"    | sed 's/  */ /' | cut -d ' ' -f 3-)  		# fd=3 means we skip the command -		case "$fd,$command,$(git rev-parse --verify --quiet "$sha1"^)" in -		3,pick,"$ONTO"*|3,p,"$ONTO"*) +		case "$fd,$command" in +		3,pick|3,p)  			# pick a commit whose parent is current $ONTO -> skip -			ONTO=$sha1 +			sha1=$(echo "$rest" | cut -d ' ' -f 1) +			case "$(git rev-parse --verify --quiet "$sha1"^)" in +			"$ONTO"*) +				ONTO=$sha1 +				;; +			*) +				fd=1 +				;; +			esac  			;; -		3,#*|3,,*) +		3,#*|3,)  			# copy comments  			;;  		*)  			fd=1  			;;  		esac -		echo "$line" >&$fd +		echo "$command${rest:+ }$rest" >&$fd  	done <"$TODO" >"$TODO.new" 3>>"$DONE" &&  	mv -f "$TODO".new "$TODO" &&  	case "$(peek_next_command)" in  | 
