Git Force Pull

Azhar Bashir Khan 6 février 2022
Git Force Pull

Dans ce didacticiel, nous allons apprendre à extraire avec force les modifications du référentiel distant dans Git.

Parfois, nous devrons peut-être ignorer les modifications locales et les remplacer par des mises à jour du référentiel distant dans un environnement de développement collaboratif.

Nous utilisons la commande git pull pour récupérer les modifications du référentiel distant vers la branche locale du référentiel local.

La commande git pull ne réussira que si les modifications dans la branche locale sont à l’origine des modifications dans le référentiel distant.

Si les modifications de la branche locale et du référentiel distant ont divergé et si nous souhaitons annuler les modifications locales, nous devons forcer un git pull pour écraser les modifications locales,

Nous allons maintenant développer cela avec un exemple.

Utiliser git fetch, git reset et git merge pour effectuer une extraction forcée des modifications à distance dans Git

La commande git pull n’est pas une opération unique. La commande git pull exécute la commande viz. git fetch pour récupérer les données du référentiel distant, puis la commande git merge pour fusionner ces modifications dans le référentiel local.

La commande git pull exécute donc les deux commandes comme suit.

$ git fetch
$ git merge origin/$CURRENT_BRANCH

La commande git fetch télécharge les dernières modifications depuis le référentiel distant. Il ne fait aucune merge ou rebase du référentiel local.

La commande git merge donnée ci-dessus fusionne les changements du dépôt distant, donnés par l’alias origin, qui ont été ajoutés au $CURRENT_BRANCH, qui ne sont pas déjà présents dans la branche locale du dépôt local.

Ainsi, le git pull échouera si la branche locale dans le dépôt local est divergente de la branche dans le dépôt distant.

Nous avons peut-être apporté des modifications locales aux fichiers dans l’arborescence de travail de la branche locale. Ainsi, cela provoque l’échec du git pull.

Nous pouvons maintenant décider de rejeter les modifications locales en faveur des modifications du référentiel distant.

Ainsi, nous devons extraire avec force les modifications qui écraseront les modifications locales.

Nous devons procéder comme suit pour obtenir une traction énergique des modifications à distance.

$ git fetch
$ git reset --hard HEAD
$ git merge origin/$CURRENT_BRANCH

La commande git reset avec l’option --hard réinitialisera la branche à ce que nous venons de récupérer. Il supprimera également toutes les modifications locales apportées aux fichiers suivis et les fichiers non suivis seront supprimés.

Par conséquent, utilisez-le avec prudence, car toutes les modifications locales seront perdues.

Alternativement, nous pouvons enregistrer les modifications locales avant de tirer les modifications. Nous pouvons stocker les modifications en utilisant git stash avec l’extraction des modifications.

Nous pouvons faire comme suit.

$ git fetch
$ git stash
$ git merge origin/$CURRENT_BRANCH
$ git stash pop

Ainsi, lorsque nous utilisons git stash, nous n’avons plus besoin de faire un git reset de la branche locale du dépôt local.

Nous avons utilisé le git stash pop pour obtenir des modifications locales de la réserve.

Article connexe - Git Pull