web-dev-qa-db-fra.com

Comment savoir si le dernier commit sur master a été poussé vers la télécommande?

J'ai fusionné une branche en master et maintenant je peux voir que dans mon git log

Un certain temps s'est écoulé et maintenant je veux savoir si j'ai déjà poussé master (avec ce commit) vers la télécommande. Comment savoir s'il a été poussé?

Je peux penser à quelques solutions de contournement telles que recloner le référentiel ailleurs, ou réinitialiser et vérifier puis re-fusionner, mais je pense qu'il y a probablement une réponse un peu plus simple.

fyi c'est différent de Comment puis-je savoir dans git si une branche a déjà été fusionnée dans master? comme je sais qu'elle a été fusionnée, je ne sais pas pour le Push distant.

28
Michael Durrant

Faire

> git status

Si la sortie est

# On branch master
nothing to commit, working directory clean

Ensuite, vous avez poussé le commit actuel.

Si la sortie commence par

# On branch master
# Your branch is ahead of 'Origin/master' by 1 commit.
#   (use "git Push" to publish your local commits)

Ensuite, vous avez un commit local qui n'a pas encore été poussé. Vous voyez cela parce que la branche distante, Origin/master, pointe sur le dernier commit envoyé à Origin. Cependant, votre succursale est ahead of 'Origin/master', ce qui signifie que vous avez un commit local qui a été créé après le dernier commit poussé.

Si le commit qui vous intéresse n'est pas le plus récent, vous pouvez le faire

> git log --decorate --oneline

pour savoir si le commit en question est avant ou après le commit pointé par Origin/master.
Si la validation est postérieure (plus haut dans le journal que) Origin/master, alors il n'a pas été poussé.

32
Klas Mellbourn

Si vous avez effectué plusieurs validations et que vous ne savez pas lequel d'entre eux a été poussé vers la télécommande, essayez ceci:

git log Origin/<remote-branch>..<local-branch>

Exemple:

git log Origin/master..master

Cela répertorierait tous les commits de votre branche locale qui n'ont pas été poussés vers la branche distante mentionnée.

10
somesh

Une solution pour le faire par programmation:

test "$(git rev-parse @{u})" = "$(git rev-parse HEAD)"

Vous pouvez également vérifier si votre répertoire local est propre, par exemple il n'y a pas de fichiers non validés modifiés:

test -z "$(git status --porcelain)"

Si vous souhaitez que votre script se termine si l'une des règles ne tient pas, vous pouvez utiliser un code comme:

test your_condition || (echo "ERROR: you have local changes"; exit 1)
6
VasiliNovikov

Je vous suggère d'exécuter ceci:

$ git fetch --all
Fetching Origin
Fetching upstream

Cela récupérera les dernières données de toutes les télécommandes.

Ensuite, vous exécutez:

$ git branch -v
  master       ef762af [ahead 3] added attach methods
* testing      4634e21 added -p flag
  upstream     1234567 [ahead 1, behind 7] updated README.md

Cela montrera sur quelles branches vous êtes devant ou derrière.

J'ai posté cela car aucune des autres réponses ne mentionne la récupération des données distantes, cette étape est cruciale.

3
asd

vous pouvez utiliser git log --graph --all --decorate, il montrera où se trouve chaque référence (HEAD, master, Origin/master etc.)

2
Vlad Nikitin

Essaye ça. git branch -r --contains <sha1>

Pour un commit dans mon référentiel, je peux voir qu'il existe sur la branche de développement à distance

git branch  -r --contains 7914e54ea7e30c7f446e791df66bd3a5805c978a
Origin/develop
0
crea1