Close

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
Fenêtre de console
Ressource connexe

Commande git log avancée

Logo Bitbucket
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.

Utilisation de git push pour publier des changements

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.

Des personnes qui collaborent à l'aide d'un mur rempli d'outils

Le blog Bitbucket

Illustration DevOps

Parcours de formation DevOps

Démos Des démos avec des partenaires d'Atlassian

Fonctionnement de Bitbucket Cloud avec Atlassian Open DevOps

Inscrivez-vous à notre newsletter DevOps

Thank you for signing up