(List
  (Com {[LIT_CHARS set]} {[LIT_CHARS -Ceu]})
  (FunctionDef GiveUp []
    (List
      (Com {[LIT_CHARS echo]} {[LIT_CHARS -n]} {[DQ [LIT_CHARS "*** "]]})
      (If
        (DBracket {B1 UNARY_STRING_n {[DQ [VarSub 1]]}})
        (Com {[LIT_CHARS echo]} {[LIT_CHARS -n]} {[DQ [VarSub 1][LIT_CHARS ": "]]})
      )
      (If
        (DBracket {B1 UNARY_STRING_n {[DQ [VarSub 2]]}})
        (Com {[LIT_CHARS echo]} {[LIT_CHARS -n]} {[DQ [VarSub 2][LIT_CHARS " "]]})
      )
      (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Please update manually! ***"]]})
      (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]})
    )
  )
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('my_repo', {[DQ [VarSub @]]})])
  (If
    (DBracket {B1 UNARY_STRING_n {[DQ [VarSub my_repo]]}})
    (Com {[LIT_CHARS cd]} {[DQ [VarSub my_repo]]})
  )
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('status', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS status]} {[LIT_CHARS --branch]} {[LIT_CHARS --short]} {[LIT_CHARS --untracked-files] [LIT_OTHER "="] [LIT_CHARS no]})]})])
  (If
    (DBracket {B2 BINARY_STRING_NOT_EQUAL {[DQ [VarSub status]]} {[DQ [LIT_CHARS "## HEAD (no branch)"]]}})
    (List
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('my_branch_ref', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS symbolic-ref]} {[LIT_CHARS HEAD]})]})])
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('my_branch', {[DQ [VarSub my_branch_ref transform_ops=[VS_UNARY_POUND {[LIT_CHARS refs] [LIT_SLASH /] [LIT_CHARS heads] [LIT_SLASH /]}]]]})])
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('my_commit', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[VarSub my_branch_ref]})]})])
    )
    (ElseTrue)
    (List
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('my_branch_ref', {[DQ [LIT_CHARS refs/heads/master]]})])
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('my_branch', {[DQ [LIT_CHARS master]]})])
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('my_commit', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[VarSub my_branch_ref]})]})])
      (If
        (DBracket {B1 UNARY_STRING_z {[DQ [VarSub my_commit]]}})
        (Com {[LIT_CHARS GiveUp]} {[DQ [VarSub my_repo]]} {[DQ [LIT_CHARS "Failed to pick a branch to change from detached HEAD."]]})
      )
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('prev_commit', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[LIT_CHARS HEAD]})]})])
      (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('merge_base', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS merge-base]} {[VarSub prev_commit]} {[VarSub my_commit]})]})])
      (If
        (DBracket {B2 BINARY_STRING_NOT_EQUAL {[DQ [VarSub merge_base]]} {[DQ [VarSub prev_commit]]}})
        (Com {[LIT_CHARS GiveUp]} {[DQ [VarSub my_repo]]} {[DQ [LIT_CHARS "Failed to pick a branch to change from detached HEAD."]]})
      )
      (Com {[LIT_CHARS git]} {[LIT_CHARS checkout]} {[DQ [VarSub my_branch]]})
    )
  )
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('upstream_branch_ref', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS for-each-ref]} {[LIT_CHARS --format] [LIT_OTHER "="] [SQ <LIT_CHARS "%(upstream)">]} {[VarSub my_branch_ref]})]})])
  (If
    (DBracket {B1 UNARY_STRING_z {[DQ [VarSub upstream_branch_ref]]}})
    (Com {[LIT_CHARS GiveUp]} {[DQ [VarSub my_repo]]} {[DQ [LIT_CHARS "Failed to determine upstream branch."]]})
  )
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('upstream_branch', {[DQ [VarSub upstream_branch_ref transform_ops=[VS_UNARY_POUND {[LIT_CHARS refs] [LIT_SLASH /] [LIT_CHARS remotes] [LIT_SLASH /]}]]]})])
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('upstream_commit', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS rev-parse]} {[VarSub upstream_branch_ref]})]})])
  (= scope=<EAssignScope.GLOBAL 1> flags=0 words=[] bindings=[('merge_base', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS merge-base]} {[VarSub my_commit]} {[VarSub upstream_commit]})]})])
  (If
    (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub merge_base]]} {[DQ [VarSub upstream_commit]]}})
    (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]})
  )
  (If
    (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub merge_base]]} {[DQ [VarSub my_commit]]}})
    (List
      (Com {[LIT_CHARS git]} {[LIT_CHARS rebase]} {[DQ [VarSub upstream_branch]]} {[DQ [VarSub my_branch]]})
      (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]})
    )
  )
  (Com {[LIT_CHARS GiveUp]} {[DQ [VarSub my_repo]]} {[DQ [LIT_CHARS "Working branch and upstream branch have diverged."]]})
)