Rebase: Reduce unnecessary switches to branch / commit

When moving branch head,
if it is not current branch, force create the branch to target revision instead of checkout and reset.
If it is current branch, force checkout the branch to target revision and hard reset.

Especially, it no longer switch to original commit of target branch at the beginning and end of rebase. It was redundant.

This reduces touching working directory files and performs faster.

Signed-off-by: Sup Yut Sum <ch3cooli@gmail.com>
Restore current branch when rebase abort

Signed-off-by: Sup Yut Sum <ch3cooli@gmail.com>
Add reverse branch/upstream button in Rebase Dialog

Signed-off-by: Sup Yut Sum <ch3cooli@gmail.com>
Fixed issue #2114: Rebase touches lots of working dir files

Signed-off-by: Sup Yut Sum <ch3cooli@gmail.com>