code: func (g *Git) PushPull(ctx context.Context, op, remote, branch string) error {
  	if !g.IsInitialized() {
  		return store.ErrGitNotInit
  	}
  
  	if branch == "" {
  		branch = g.defaultBranch(ctx)
  	}
  	if remote == "" {
  		remote = g.defaultRemote(ctx, branch)
  	}
  
  	if v, err := g.ConfigGet(ctx, "remote."+remote+".url"); err != nil || v == "" {
  		return store.ErrGitNoRemote
  	}
  
  	if err := g.Cmd(ctx, "gitPush", "pull", remote, branch); err != nil {
  		if op == "pull" {
  			return err
  		}
  		out.Yellow(ctx, "Failed to pull before git push: %s", err)
  	}
  	if op == "pull" {
  		return nil
  	}
  
  	return g.Cmd(ctx, "gitPush", "push", remote, branch)
  }
docs: // PushPull pushes the repo to it's origin.
  // optional arguments: remote and branch