git push
La commande git push
est utilisée pour charger le contenu d'un dépôt local vers un dépôt distant. Le push vous permet de transférer les commits de votre dépôt local vers un dépôt distant. C'est l'équivalent de git fetch, mais à l'inverse du fetch qui importe les commits dans des branches locales, le push les exporte vers des branches distantes. Ces dernières sont configurées à l'aide de la commande git remote. Le push est susceptible d'écraser les changements. Vous devez donc prendre des précautions lorsque vous l'exécutez. Ces problèmes sont abordés ci-dessous.
Utilisation de la commande git push
git push <remote> <branch>
La commande ci-dessus fait un push de la branche spécifiée vers , avec tous les commits et objets internes nécessaires. Cela crée une branche locale dans le dépôt cible. Pour éviter toute suppression de commits, Git ne vous autorise pas à faire un push si cela engendre un merge sans fast-forward dans le dépôt cible.
git push <remote> --force
Identique à la commande ci-dessus, mais le push est forcé même s'il entraîne un merge sans fast-forward. N'utilisez pas l'indicateur --force
si vous n'êtes pas absolument sûr de ce que vous faites.
Pushe toutes vos branches locales vers le remote spécifié.
git push <remote> --tags
Ressource connexe
Commande git log avancée
DÉCOUVRIR LA SOLUTION
Découvrir Git avec Bitbucket Cloud
Lorsque vous faites un push d'une branche ou que vous utilisez l'option --all
, le push des tags n'est pas automatique. L'indicateur --tags
envoie tous vos tags locaux vers le dépôt distant.
Discussion sur la commande git push
git push
est la commande la plus couramment utilisée pour publier des changements locaux et les charger vers un dépôt centralisé. Après qu'un dépôt local a été modifié, un push est exécuté pour partager les changements avec les membres de l'équipe distants.
Le schéma ci-dessus montre ce qui arrive lorsque votre branche principale (Main
) locale évolue par rapport à la branche principale (Main
) du dépôt centralisé et que vous publiez des changements en exécutant git push origin main
. Vous noterez que git push
est pratiquement identique à git merge main
à l'intérieur du dépôt distant.
Git push et synchronisation
git push
est l'un des nombreux composants utilisés dans le processus de « synchronisation » Git global. Les commandes de synchronisation sont exécutées 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 chargement, tandis que git fetch et git pull peuvent être envisagées comme des commandes de téléchargement. Une fois que les ensembles de changements ont été déplacés par une opération de chargement ou de téléchargement, vous pouvez exécuter une commande git merge dans le dépôt cible pour intégrer les changements.
Faire un push vers des dépôts bruts
Une pratique Git moderne et fréquemment utilisée consiste à faire en sorte qu'un dépôt --bare
hébergé à distance agisse comme un dépôt origin centralisé. Ce dernier est souvent hébergé hors site, auprès d'un service tiers de confiance comme Bitbucket. Puisque le push altère la structure de la branche distante, il est à la fois plus sûr et plus courant de faire un push vers des dépôts créés à l'aide de l'indicateur --bare
. Les dépôts bruts ne possèdent pas de répertoire de travail, de sorte que le push ne va pas altérer le contenu en cours dans le répertoire de travail. Pour en savoir plus sur la création de dépôts bruts, lisez notre tutoriel sur git init.
Push forcé
Git vous empêche d'écraser l'historique du dépôt centralisé en refusant les demandes de push si celles-ci entraînent un merge sans fast-forward. Par conséquent, si l'historique distant a divergé par rapport au vôtre, vous devez faire un pull de la branche distante et la merger dans votre branche locale, avant de tenter un nouveau push. Ce processus est similaire à celui de SVN lorsque vous exécutez svn update
afin de synchroniser votre dépôt avec le dépôt centralisé avant de commiter un ensemble de changements.
L'indicateur --force
outrepasse ce comportement et fait correspondre la branche du dépôt distant avec votre branche locale, supprimant au passage les changements en amont qui ont pu être effectués depuis le dernier pull. La seule situation dans laquelle vous devez forcer un push est lorsque vous vous rendez compte que les commits que vous venez de partager ne sont pas totalement corrects et que vous les avez corrigés grâce à git commit --amend
ou à un rebase interactif. Cependant, vous devez être absolument certain qu'aucun de vos coéquipiers n'a fait un pull de ces commits avant d'utiliser l'option --force
.
Exemples
Git push par défaut
L'exemple suivant décrit l'une des méthodes standard pour publier des contributions locales dans le dépôt centralisé. Tout d'abord, vous devez vous assurer que votre branche principale (Main) locale est à jour en faisant un fetch de la copie du dépôt centralisé et en faisant un rebase de vos changements par-dessus. Le rebase interactif est également une bonne occasion de nettoyer vos commits avant de les partager. Ensuite, la commande git push
envoie tous les commits sur votre branche principale (Main) locale vers le dépôt centralisé.
git checkout main
git fetch origin main
git rebase -i origin/main
# Squash commits, fix up commit messages etc.
git push origin main
Comme nous avons déjà vérifié que la branche principale (Main) locale était à jour, cette opération devrait entraîner un merge en fast-forward, et git push
ne devrait pas réagir aux problèmes d'absence de fast-forward que nous avons vus plus haut.
Force push modifié
La commande git commit accepte une option --amend
qui va mettre à jour le commit précédent. Un commit est souvent modifié pour mettre à jour le message de commit ou ajouter de nouveaux changements. Après la modification d'un commit, git push
échoue, car Git considère le commit modifié et le commit distant comme du contenu qui a divergé. L'option --force
doit être utilisée pour faire un push d'un commit modifié.
# make changes to a repo and git add
git commit --amend
# update the existing commit message
git push --force origin main
Les exemples ci-dessus partent du principe que la commande est exécutée sur un dépôt existant, qui dispose d'un historique des commits. git commit --amend
permet de mettre à jour le commit précédent. Un push forcé du commit modifié est ensuite réalisé à l'aide de l'option --force
.
Suppression d'une branche distante ou d'un tag
Parfois, il est nécessaire de nettoyer les branches à des fins d'archivage ou d'organisation. Afin de supprimer entièrement une branche, celle-ci doit être supprimée en local et à distance.
git branch -D branch_name
git push origin :branch_name
La commande ci-dessus va supprimer la branche distante appelée « branch_name ». Pour supprimer la branche distante, vous devez transmettre un nom de branche précédé d'un double point à git push
.
Partager cet article
Thème suivant
Lectures recommandées
Ajoutez ces ressources à vos favoris pour en savoir plus sur les types d'équipes DevOps, ou pour les mises à jour continues de DevOps chez Atlassian.