web-dev-qa-db-fra.com

Quelle est la différence entre git pull et git reset --hard Origin / <branch>?

Je trouve que ce dernier est plus rapide que le premier, donc je le fais généralement après git fetch chaque fois que je dois synchroniser ma branche locale avec la télécommande. Quelle est la différence, le cas échéant?

20
technophyle

Les commandes suivantes:

git fetch
git reset --hard Origin/<branch>

supprimera toutes les modifications locales.

Tandis que:

git pull

C'est exactement la même chose que:

git fetch
git merge Origin/<branch>

tentera de préserver les changements locaux.

32
Penguin Brian
$ git pull                        
# takes the latest changes of Origin/branch (exists both local & remote changes)

$ git reset --hard Origin/branch  
# replace your local with Origin's branch history (discard local changes)

Exemple: Disons que nous avons deux commits dans local A, B et remote a deux commits A, C. Maintenant, si vous tirez, votre section locale contient A, B, C contrairement à reset alors votre section locale aura A, C pas B.

3
Sajib Khan

La façon dont vous obtenez une mise à jour source est plus importante que votre souci de performances. Vous devez les utiliser pour des cas spécifiques. Je peux vous donner deux exemples:

  • git reset --hard ... peut être utilisé pour mettre à jour le code en production si vous vous trouvez souvent à modifier le code de production pour le débogage. Cela se produit généralement au début d'un déploiement de projet avec des pensées paresseuses.
  • git pull est la manière la plus acceptée d'obtenir de nouveaux commits et il est généralement logique que vous n'ayez pas d'énormes changements locaux. Si vos périodes de validation sont plus longues avec plus de personnes sur la même branche, vous pourriez éventuellement avoir le sentiment de faire git pull --rebase ou chercher d'abord puis comparer.

Git peut être explicite pour des besoins très spécifiques de votre style de développement, vous pouvez les découvrir sur la route. La performance ne devrait plus être une préoccupation une fois que vous êtes satisfait de la sécurité de votre travail.

0
yasc

Ces deux commandes sont principalement utilisées pour des situations différentes.

git pull pull (fetch & merge) passe de distant à local, en particulier les autres validations Push vers distant et vous souhaitez que ces validations s'appliquent à votre branche locale.

git reset --hard Origin/branch est forcé de faire pointer votre branche locale vers le commit vers lequel pointe Origin/branch. C'est généralement pour la situation que vous souhaitez abandonner les modifications locales que vous avez apportées et conserver la branche locale en tant que statut distant.

0
Marina Liu

Ils sont complètement différents dans ce qu'ils font:

git pull: Incorpore les modifications d'un référentiel distant dans la branche actuelle. Dans son mode par défaut, git pull est un raccourci pour git fetch suivi de git merge FETCH_HEAD.

Avec git reset --hard Origin/branch Git va:

  • Redéfinissez votre branche actuelle (généralement maître) au point sur <SOME-COMMIT>.
  • Rendez ensuite les fichiers de votre arborescence de travail et de l'index ("zone de transit") identiques aux versions validées dans <SOME-COMMIT>.

Note: il vaut toujours la peine de noter que git reset --hard est une commande potentiellement dangereuse, car elle annule toutes vos modifications non validées. Par sécurité, vous devez toujours vérifier que la sortie de git status est propre (c'est-à-dire vide) avant de l'utiliser.

0
VaTo