git push

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.

Utilisation de git push pour publier des modifications

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 remotegit 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *