Skip to content
Advertisement

Check status of local Python relative to remote with GitPython

How can I use GitPython to determine whether:

  • My local branch is ahead of the remote (I can safely push)
  • My local branch is behind the remote (I can safely pull)
  • My local branch has diverged from the remote?

To check if the local and remote are the same, I’m doing this:

def local_and_remote_are_at_same_commit(repo, remote):
    local_commit = repo.commit()
    remote_commit = remote.fetch()[0].commit
    return local_commit.hexsha == remote_commit.hexsha

Advertisement

Answer

See https://stackoverflow.com/a/15862203/197789

E.g.

commits_behind = repo.iter_commits('master..origin/master')

and

commits_ahead = repo.iter_commits('origin/master..master')

Then you can use something like the following to go from iterator to a count:

count = sum(1 for c in commits_ahead)

(You may want to fetch from the remotes before running iter_commits, eg: repo.remotes.origin.fetch())

This was last checked with GitPython 1.0.2.

User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement