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