code: def update(self):
          
          # Fetch remotes, so we know we're dealing with latest remote
          yield from self.update_remotes()
  
          # Rename local untracked files that might be overwritten by pull
          yield from self.rename_local_untracked()
  
          # Reset local files that have been deleted. We don't actually expect users to
          # delete something that's present upstream and expect to keep it. This prevents
          # unnecessary conflicts, and also allows users to click the link again to get
          # a fresh copy of a file they might have screwed up.
          yield from self.reset_deleted_files()
  
          # If there are local changes, make a commit so we can do merges when pulling
          # We also allow empty commits. On NFS (at least), sometimes repo_is_dirty returns a false
          # positive, returning True even when there are no local changes (git diff-files seems to return
          # bogus output?). While ideally that would not happen, allowing empty commits keeps us
          # resilient to that issue.
          if self.repo_is_dirty():
              yield from self.ensure_lock()
              yield from execute_cmd(['git', 'commit', '-am', 'WIP', '--allow-empty'], cwd=self.repo_dir)
  
          # Merge master into local!
          yield from self.ensure_lock()
          yield from execute_cmd(['git', 'merge', '-Xours', 'origin/{}'.format(self.branch_name)], cwd=self.repo_dir)
docs: Do the pulling if necessary