Abstract git logic