La commande git push
est utilisée pour télécharger le contenu du dépôt local vers un dépôt distant. Pushing est la façon dont vous transférez les commits de votre dépôt local vers un repo distant. C’est le pendant de git fetch
, mais alors que fetching importe les commits vers les branches locales, pushing exporte les commits vers les branches distantes. Les branches distantes sont configurées à l’aide de la commande git remote
. Pushing a le potentiel d’écraser les changements, la prudence doit être prise lors du pushing. Ces problèmes sont abordés ci-dessous.
Utilisation de Git push
git push <remote> <branch>
Pousser la branche spécifiée vers , avec tous les commits et objets internes nécessaires. Cela crée une branche locale dans le référentiel de destination. Pour vous empêcher d’écraser des commits, Git ne vous laissera pas pousser lorsque cela entraîne une fusion non rapide dans le dépôt de destination.
git push <remote> --force
Similaire à la commande ci-dessus, mais force le push même s’il entraîne une fusion non rapide. N’utilisez pas le drapeau --force
à moins d’être absolument sûr de savoir ce que vous faites.
git push <remote> --all
Pousser toutes vos branches locales vers le distant spécifié.
git push <remote> --tags
Les balises ne sont pas automatiquement poussées lorsque vous poussez une branche ou utilisez l’option --all
. Le drapeau --tags
envoie toutes vos balises locales vers le dépôt distant.
Discussion sur Git push
git push
est le plus souvent utilisé pour publier un téléchargement de modifications locales vers un dépôt central. Après la modification d’un dépôt local, un push est exécuté pour partager les modifications avec les membres de l’équipe à distance.
Le schéma ci-dessus montre ce qui se passe lorsque votre master
local a progressé au-delà du master
du dépôt central et que vous publiez des modifications en exécutant git push origin master
. Remarquez comment git push
est essentiellement la même chose que l’exécution de git merge master
à partir de l’intérieur du dépôt distant.
Pousser et synchroniser Git
git push
est un composant parmi d’autres utilisé dans le processus global de « synchronisation » de Git. Les commandes de synchronisation opèrent sur des branches distantes qui sont configurées à l’aide de la commande git remote
git push
peut être considérée comme une commande de » téléchargement » alors que, git fetch
et git pull
peuvent être considérées comme des commandes de » téléchargement « . Une fois que les changesets ont été déplacés via un download ou un upload, un git merge
peut être effectué à la destination pour intégrer les changements.
Pushing to bare repositories
Une pratique Git moderne fréquemment utilisée consiste à avoir un dépôt --bare
hébergé à distance qui agit comme un dépôt d’origine central. Ce dépôt d’origine est souvent hébergé hors site avec un tiers de confiance comme Bitbucket. Puisque le push perturbe la structure de la branche distante, il est plus sûr et plus courant de pousser vers des dépôts qui ont été créés avec le drapeau --bare
. Les dépôts nus n’ont pas de répertoire de travail, donc un push ne modifiera pas le contenu du répertoire de travail en cours. Pour plus d’informations sur la création de dépôts nus, lisez git init
.
Forcer le push
Git vous empêche d’écraser l’historique du dépôt central en refusant les demandes de push lorsqu’elles aboutissent à une fusion non fast-forward. Ainsi, si l’historique distant a divergé de votre historique, vous devez tirer la branche distante et la fusionner dans votre branche locale, puis essayer de pousser à nouveau. Ceci est similaire à la façon dont SVN vous fait synchroniser avec le dépôt central via svn update
avant de commiter un changeset.
Le drapeau --force
outrepasse ce comportement et fait en sorte que la branche du dépôt distant corresponde à votre branche locale, en supprimant toutes les modifications amont qui ont pu se produire depuis votre dernier pull. La seule fois où vous devriez avoir besoin de forcer le push est lorsque vous réalisez que les commits que vous venez de partager n’étaient pas tout à fait corrects et que vous les avez corrigés avec un git commit --amend
ou un rebase interactif. Cependant, vous devez être absolument certain qu’aucun de vos coéquipiers n’a tiré ces commits avant d’utiliser l’option --force
.
Git push par défaut
L’exemple suivant décrit l’une des méthodes standard pour publier les contributions locales dans le dépôt central. Tout d’abord, il s’assure que votre master local est à jour en récupérant la copie du dépôt central et en rebasant vos modifications par-dessus. Le rebasement interactif est également une bonne occasion de nettoyer vos commits avant de les partager. Ensuite, la commande git push
envoie tous les commits de votre master local vers le dépôt central.
git checkout master
git fetch origin master
git rebase -i origin/master
# Squash commits, fix up commit messages etc.
git push origin master
Puisque nous nous sommes déjà assurés que le master local était à jour, cela devrait se traduire par une fusion rapide, et git push
ne devrait pas se plaindre d’aucun des problèmes non rapides discutés ci-dessus.
Force push modifié
La commande git commit
accepte une option --amend
qui mettra à jour le commit précédent. Un commit est souvent modifié pour mettre à jour le message de commit ou ajouter de nouveaux changements. Une fois qu’un commit est modifié, une git push
échouera car Git verra le commit modifié et le commit distant comme un contenu divergent. L’option --force
doit être utilisée pour pousser un commit modifié.
# make changes to a repo and git add
git commit --amend
# update the existing commit message
git push --force origin master
L’exemple ci-dessus suppose qu’il est exécuté sur un dépôt existant avec un historique de commit. git commit --amend
est utilisé pour mettre à jour le commit précédent. Le commit modifié est ensuite poussé de force à l’aide de l’option --force
.
Suppression d’une branche ou d’une balise distante
Parfois, les branches doivent être nettoyées à des fins comptables ou organisationnelles. La suppression complète d’une branche, elle doit être supprimée localement et aussi à distance.
git branch -D branch_name
git push origin :branch_name
Ce qui précède supprimera la branche distante nommée nom_branche en passant un nom de branche préfixé par un deux-points à git push
supprimera la branche distante.