Set<GitLocalBranch> (@NotNull GitRepository repository) { Set<GitLocalBranch> result = new HashSet<>(); GitBranchesCollection branchesCollection = repository.getBranches(); Map<GitLocalBranch, Hash> cachedBranchesToFetch = myLocalBranchesToFetch.get(repository); branchesCollection.getLocalBranches().forEach(localBranch -> { GitBranchTrackInfo info = GitBranchUtil.getTrackInfoForBranch(repository, localBranch); if (info == null) return; Hash localHashForRemoteBranch = branchesCollection.getHash(info.getRemoteBranch()); Hash localHash = branchesCollection.getHash(localBranch); if (localHashForRemoteBranch == null) return; if (hasCommitsForBranch(repository, info.getLocalBranch(), localHash, localHashForRemoteBranch, true)) { result.add(info.getLocalBranch()); } else if (cachedBranchesToFetch != null && localHashForRemoteBranch.equals(cachedBranchesToFetch.get(localBranch))) { result.add(info.getLocalBranch()); } }); return result; }