explicit possible null value for checkout reference
implement addSubmodule
let checkout() support tag/branch as ref string
throw GitException when revParse fails to resolve revision parameter
to ensure full backward compatibility
tag to forceUpdate, so existing tag is moved
force deleteBranch to delete un-merged branches
use JGit Commands for checkout(ref) and push()