Quelles sont les différences entre git pull
et git fetch
?
git
version-control
git-pull
git-fetch
pupeno
la source
la source
git fetch; git reset --hard origin/master
partie intégrante de notre flux de travail. Il supprime les modifications locales, vous permet de rester à jour avec le maître MAIS vous assure de ne pas simplement ajouter de nouvelles modifications en plus des modifications actuelles et de faire un gâchis. Nous l'avons utilisé pendant un certain temps et il se sent beaucoup plus sûr dans la pratique. Assurez-vous simplement d'ajouter / valider / ranger tout travail en cours en premier!Réponses:
En termes simples,
git pull
fait ungit fetch
suivi d'ungit merge
.Vous pouvez faire un
git fetch
à tout moment pour mettre à jour vos branches de suivi à distance sousrefs/remotes/<remote>/
.Cette opération ne modifie jamais aucune de vos propres succursales locales
refs/heads
et peut être effectuée sans changer votre copie de travail. J'ai même entendu parler de gens qui couraientgit fetch
périodiquement dans un travail cron en arrière-plan (bien que je ne recommanderais pas de le faire).A
git pull
est ce que vous feriez pour mettre à jour une succursale locale avec sa version distante, tout en mettant à jour vos autres succursales de suivi à distance.Documentation Git - Git Pull :
la source
git pull
fusionnera toujours dans la branche actuelle . Vous sélectionnez donc la branche à partir de laquelle vous souhaitez tirer , et il la tire dans la branche actuelle. La branche from peut être locale ou distante; il peut même s'agir d'une branche distante qui n'est pas enregistréegit remote
(ce qui signifie que vous passez une URL sur lagit pull
ligne de commande)./home/alice/
et que je faisgit fetch /home/bob
, quels paramètres dois-je passer aux suivantsgit merge
?pull
ne peut pas réellement être émulé par unfetch
plus unmerge
. Je viens de récupérer un changement où seul un pointeur de branche distant change etmerge
refuse de faire quoi que ce soit.pull
, d'autre part, avance rapidement ma branche de suivi.Lorsque vous utilisez
pull
, Git essaie de faire automatiquement votre travail pour vous. Il est sensible au contexte , donc Git fusionnera toutes les validations extraites dans la branche dans laquelle vous travaillez actuellement.pull
Fusionne automatiquement les validations sans vous permettre de les consulter au préalable . Si vous ne gérez pas étroitement vos succursales, vous pouvez rencontrer des conflits fréquents.Lorsque vous
fetch
, Git rassemble toutes les validations de la branche cible qui n'existent pas dans votre branche actuelle et les stocke dans votre référentiel local . Cependant, il ne les fusionne pas avec votre branche actuelle . Cela est particulièrement utile si vous devez maintenir votre référentiel à jour, mais que vous travaillez sur quelque chose qui pourrait se casser si vous mettez à jour vos fichiers. Pour intégrer les validations dans votre branche principale, vous utilisezmerge
.la source
git fetch
ne met à jour que votre.git/
répertoire (AKA: dépôt local) et rien à l'extérieur.git/
(AKA: arbre de travail). Cela ne change pas vos succursales locales et ne touche pas nonmaster
plus. Il toucheremotes/origin/master
cependant (voirgit branch -avv
). Si vous avez plus de télécommandes, essayezgit remote update
. Il s'agit d'unegit fetch
télécommande pour toutes les télécommandes en une seule commande..git/refs/remotes/origin/
..git
? Quel est l'avantage prévu et que dois-je faire après cela?Il est important de comparer la philosophie de conception de git avec la philosophie d'un outil de contrôle de source plus traditionnel comme SVN.
Subversion a été conçu et construit avec un modèle client / serveur. Il y a un seul référentiel qui est le serveur, et plusieurs clients peuvent récupérer le code du serveur, y travailler, puis le remettre sur le serveur. L'hypothèse est que le client peut toujours contacter le serveur lorsqu'il a besoin d'effectuer une opération.
Git a été conçu pour prendre en charge un modèle plus distribué sans avoir besoin d'un référentiel central (bien que vous puissiez certainement en utiliser un si vous le souhaitez). Git a également été conçu pour que le client et le "serveur" n'aient pas besoin d'être en ligne en même temps. Git a été conçu pour que les personnes sur un lien non fiable puissent même échanger du code par e-mail. Il est possible de travailler complètement déconnecté et de graver un CD pour échanger du code via git.
Afin de prendre en charge ce modèle, git maintient un référentiel local avec votre code et également un référentiel local supplémentaire qui reflète l'état du référentiel distant. En conservant une copie du référentiel distant localement, git peut déterminer les modifications nécessaires même lorsque le référentiel distant n'est pas accessible. Plus tard, lorsque vous devez envoyer les modifications à quelqu'un d'autre, git peut les transférer en tant qu'ensemble de modifications à partir d'un moment connu du référentiel distant.
git fetch
est la commande qui dit "mettre à jour ma copie locale du référentiel distant".git pull
dit "apporter les modifications dans le référentiel distant à l'endroit où je conserve mon propre code."git pull
Cela se fait normalement en effectuant une misegit fetch
à jour de la copie locale du référentiel distant, puis en fusionnant les modifications dans votre propre référentiel de code et éventuellement votre copie de travail.Le point à retenir est de garder à l'esprit qu'il y a souvent au moins trois copies d'un projet sur votre poste de travail. Une copie est votre propre référentiel avec votre propre historique de commit. La deuxième copie est votre copie de travail où vous éditez et construisez. La troisième copie est votre copie locale "en cache" d'un référentiel distant.
la source
remoteName/
Git à partir du sol est une très bonne lecture. Une fois que vous comprenez comment Git fonctionne - et c'est magnifiquement simple , vraiment - tout a du sens.Voici l'image d'Oliver Steele de la façon dont tout cela s'imbrique :
S'il y a suffisamment d'intérêt, je suppose que je pourrais mettre à jour l'image à ajouter
git clone
etgit merge
...la source
git clone
etgit merge
serait très utile!git merge
- cela devrait clairement montrer quemerge
appelé séparément n'est PAS la même chose que d'appelerpull
car ilpull
fusionne uniquement à distance et ignore vos validations locales dans votre branche locale qui suit la branche distante à partir de laquelle vous êtes extrait.Un cas d'utilisation
git fetch
est que ce qui suit vous indiquera toutes les modifications apportées à la branche distante depuis votre dernier pull ... afin que vous puissiez vérifier avant de faire un pull réel, ce qui pourrait changer les fichiers dans votre branche actuelle et votre copie de travail.Voir: https://git-scm.com/docs/git-diff concernant la syntaxe à double et triple points dans la commande diff
la source
git diff ..origin
?git diff ...origin
est équivalent àgit diff $(git-merge-base HEAD origin) origin
(voir lagit diff [--options] <commit>...<commit> [--] [<path>…]
section de kernel.org/pub/software/scm/git/docs/git-diff.html#_description ), qui est différent degit diff origin
;git diff ...origin
est conceptuellement les modifications apportéesorigin
depuis la branche courante depuis la brancheorigin
, tout engit diff origin
incluant également l'inverse des modifications apportées dans la branche actuelle depuis la brancheorigin
.git diff origin/master
fonctionne, comme mentionné ci-dessousCela m'a coûté un peu pour comprendre quelle était la différence, mais c'est une explication simple.
master
dans votre localhost est une succursale.Lorsque vous clonez un référentiel, vous récupérez l'intégralité du référentiel vers votre hôte local. Cela signifie qu'à ce moment-là, vous avez un pointeur origine / maître vers
HEAD
et maître pointant vers le mêmeHEAD
.lorsque vous commencez à travailler et effectuez des validations, vous faites avancer le pointeur principal vers
HEAD
+ vos validations. Mais le pointeur d'origine / maître pointe toujours vers ce qu'il était lorsque vous avez cloné.La différence sera donc:
git fetch
cela, il récupérera simplement toutes les modifications dans le référentiel distant ( GitHub ) et déplacera le pointeur d'origine / maître versHEAD
. Pendant ce temps, votre directeur de succursale local indiquera toujours où il se trouve.git pull
, il va essentiellement récupérer (comme expliqué précédemment) et fusionner toutes les nouvelles modifications apportées à votre branche principale et déplacer le pointeur versHEAD
.la source
git fetch
c'était littéralement de télécharger les modifications sur le référentiel distant dans votre référentiel local, mais PAS de les valider - c'est-à-dire, elles doivent encore être ajoutées / validées dans votre référentiel local.Parfois, une représentation visuelle aide.
la source
git pull
est sautent le Fetch, ce qui bien sûr est inexacte.Brièvement
git fetch
est similairepull
mais ne fusionne pas. c'est-à-dire qu'il récupère les mises à jour à distance (refs
etobjects
) mais votre local reste le même (c'est-à-dire qu'ilorigin/master
est mis à jour maismaster
reste le même).git pull
tire vers le bas d'une télécommande et fusionne instantanément.Plus
git clone
clone un dépôt.git rebase
enregistre les éléments de votre branche actuelle qui ne se trouvent pas dans la branche en amont dans une zone temporaire. Votre branche est maintenant la même qu'avant le début de vos modifications. Ainsi, vousgit pull -rebase
abaissez les modifications à distance, rembobinez votre branche locale, relisez vos modifications par-dessus votre branche actuelle jusqu'à ce que vous soyez à jour.En outre,
git branch -a
vous montrera exactement ce qui se passe avec toutes vos succursales - locales et distantes.Ce billet de blog était utile:
La différence entre git pull, git fetch et git clone (et git rebase) - Mike Pearce
et couvertures
git pull
,git fetch
,git clone
etgit rebase
.====
MISE À JOUR
Je pensais que je mettrais à jour ceci pour montrer comment vous utiliseriez réellement ceci dans la pratique.
Mettez à jour votre référentiel local à distance (mais ne fusionnez pas):
Après avoir téléchargé les mises à jour, voyons les différences:
Si vous êtes satisfait de ces mises à jour, fusionnez:
Remarques:
À l'étape 2: Pour en savoir plus sur les différences entre les télécommandes locales et distantes, voir: Comment comparer une branche git locale avec sa branche distante?
À l'étape 3: il est probablement plus précis (par exemple sur un référentiel à évolution rapide) de faire un
git rebase origin
ici. Voir le commentaire @Justin Ohms dans une autre réponse.Voir aussi: http://longair.net/blog/2009/04/16/git-fetch-and-merge/
la source
git clone
. Je mets l'astuce entre guillemets, car je suppose que cela signifierait quel que soit le maître et ce que quelqu'un "téléchargerait comme zip" sur github.comVous tireriez si vous voulez que les histoires soient fusionnées, vous iriez chercher si vous vouliez juste le codez, car une personne a tagué certains articles ici.
la source
git fetch
il récupère les modifications du référentiel et met à jour votre branche distante locale. Cela n'affecte pas votre branche locale qui suit la branche distante locale, donc n'affecte pas votre copie de travail. Maintenant, lorsque vous effectuez une opération,merge
il fusionnera les modifications extraites avec votre branche locale.Vous pouvez récupérer à partir d'un référentiel distant, voir les différences, puis extraire ou fusionner.
Voici un exemple pour un référentiel distant appelé
origin
et une branche appeléemaster
suivi de la branche distanteorigin/master
:la source
La réponse courte et facile
git pull
est simplementgit fetch
suiviegit merge
.Il est très important de noter que
git pull
cela fusionnera automatiquement, que cela vous plaise ou non . Cela pourrait, bien sûr, entraîner des conflits de fusion. Disons que votre télécommande estorigin
et votre succursale l'estmaster
. Si vousgit diff origin/master
avant de tirer, vous devriez avoir une idée des conflits de fusion potentiels et préparer votre succursale locale en conséquence.En plus de tirer et de pousser, certains workflows impliquent
git rebase
, comme celui-ci, que je paraphrase de l'article lié:Si vous vous trouvez dans une telle situation, vous pourriez être tenté de le faire
git pull --rebase
. À moins que vous ne sachiez vraiment, vraiment ce que vous faites, je vous déconseille. Cet avertissement provient de laman
page degit-pull
, version2.3.5
:la source
git pull --rebase
n'est pas la bonne chose dans la situation donnée, est-ce bien si cela se fait en deux étapes? Si c'est la bonne chose à faire, quel est l'avantage supplémentaire de le faire en deux étapes?rebase
lorsque vous travaillez sur une branche locale qui n'est pas déjà poussée. Si vous travaillez sur une branche qui existe dans la télécommande, celarebase
peut entraîner des problèmes désagréables, vous devriez donc préférer un habituémerge
.OK , voici quelques informations sur
git pull
etgit fetch
, afin que vous puissiez comprendre les différences réelles ... en quelques mots simples, fetch obtient les dernières données, mais pas les modifications de code et ne va pas jouer avec votre code de branche local actuel, mais tirez get le code change et fusionnez-le dans votre branche locale, lisez la suite pour obtenir plus de détails sur chacun d'eux:git fetch
Il téléchargera toutes les références et les objets et toutes les nouvelles branches dans votre référentiel local ...
git pull
Il appliquera les modifications de distance à la branche actuelle en local ...
Je crée également le visuel ci-dessous pour vous montrer comment
git fetch
etgit pull
travailler ensemble ...la source
Cette représentation graphique interactive est très utile pour comprendre git: http://ndpsoftware.com/git-cheatsheet.html
git fetch
il suffit de «télécharger» les modifications de la télécommande vers votre référentiel local.git pull
télécharge les modifications et les fusionne dans votre branche actuelle. "Dans son mode par défaut,git pull
est un raccourci pourgit fetch
suivi degit merge FETCH_HEAD
."la source
Prime:
En parlant de pull & fetch dans les réponses ci-dessus, je voudrais partager une astuce intéressante,
git pull --rebase
Cette commande ci-dessus est la commande la plus utile de ma vie git qui a permis de gagner beaucoup de temps.
Avant de pousser vos nouvelles validations sur le serveur, essayez cette commande et elle synchronisera automatiquement les dernières modifications du serveur (avec une extraction + fusion) et placera votre validation en haut dans git log. Pas besoin de s'inquiéter de l'extraction / fusion manuelle.
Plus de détails sur: http://gitolite.com/git-pull--rebase
la source
git pull
etgit pull --rebase
?J'aime avoir une représentation visuelle de la situation pour saisir ces choses. Peut-être que d'autres développeurs aimeraient le voir aussi, alors voici mon ajout. Je ne suis pas totalement sûr que tout soit correct, veuillez donc commenter si vous trouvez des erreurs.
Certains avantages majeurs pour avoir un miroir récupéré de la télécommande sont:
la source
git pull
également effectuer une fusion, c'est-à-dire aller jusqu'à la copie de travail?J'ai également eu du mal avec cela. En fait, je suis arrivé ici avec une recherche Google sur exactement la même question. En lisant toutes ces réponses, j'ai finalement peint une image dans ma tête et j'ai décidé d'essayer de le faire en regardant l'état des 2 référentiels et 1 bac à sable et les actions effectuées au fil du temps tout en regardant la version d'entre eux. Voici donc ce que j'ai trouvé. Veuillez me corriger si j'ai foiré quelque part.
Les trois repos avec un fetch:
Les trois repos avec un pull
Cela m'a aidé à comprendre pourquoi une extraction est assez importante.
la source
La différence entre GIT Fetch et GIT Pull peut être expliquée par le scénario suivant: (en gardant à l'esprit que les images parlent plus fort que les mots !, j'ai fourni une représentation picturale)
Prenons un exemple que vous travaillez sur un projet avec les membres de votre équipe. Donc, ils seront une branche principale du projet et tous les contributeurs doivent le fourcher à leur propre référentiel local, puis travailler sur cette branche locale pour modifier / ajouter des modules, puis repousser vers la branche principale.
Ainsi, l' état initial des deux branches lorsque vous avez bifurqué le projet principal sur votre référentiel local sera comme ceci - (
A
,B
etC
les modules sont-ils déjà terminés du projet)Maintenant, vous avez commencé à travailler sur le nouveau module (supposons
D
) et lorsque vous avez terminé leD
module que vous voulez pousser à la branche principale, mais en attendant ce qui se passe est que l' un de vos coéquipiers a développé un nouveau moduleE
,F
et modifiéC
.Alors maintenant, ce qui s'est passé, c'est que votre référentiel local manque derrière la progression initiale du projet et donc pousser vos modifications vers la branche principale peut entraîner des conflits et peut provoquer un
D
dysfonctionnement de votre module .Pour éviter de tels problèmes et travailler parallèlement à l'avancement initial du projet, il existe deux façons:
1. Git Fetch - Cela téléchargera toutes les modifications qui ont été apportées au projet d'origine / branche principale qui ne sont pas présentes dans votre branche locale. Et attendra la commande Git Merge pour appliquer les modifications qui ont été récupérées à votre référentiel ou branche.
Alors maintenant, vous pouvez surveiller attentivement les fichiers avant de les fusionner dans votre référentiel. Et vous pouvez également modifier
D
si nécessaire en raison de ModifiéC
.2. Git Pull - Cela mettra à jour votre branche locale avec la branche origine / principale, c'est-à-dire que ce qu'elle fait est une combinaison de Git Fetch et de Git Merge l'une après l'autre. Mais cela peut provoquer des conflits, il est donc recommandé d'utiliser Git Pull avec une copie propre.
la source
Nous disons simplement:
Si vous exécutez
git pull
, vous n'avez pas besoin de fusionner les données en local. Si vous exécutezgit fetch
, cela signifie que vous devez exécutergit merge
pour obtenir le dernier code sur votre ordinateur local. Sinon, le code machine local ne serait pas modifié sans fusion.Donc, dans Git Gui, lorsque vous récupérez, vous devez fusionner les données. La récupération elle-même n'apportera pas les modifications de code à votre section locale. Vous pouvez vérifier cela lorsque vous mettez à jour le code en récupérant une fois fetch et voyez; le code, il ne changera pas. Ensuite, vous fusionnez ... Vous verrez le code modifié.
la source
git pull == git fetch + git merge
:)git pull --rebase = git fetch + git rebase
git fetch
tire le code du serveur distant vers vos branches de suivi dans votre référentiel local. Si votre télécommande est nomméorigin
(par défaut), ces branches sera dansorigin/
, par exempleorigin/master
,origin/mybranch-123
etc. Ce ne sont pas vos succursales actuelles, ils sont locaux des copies de ces branches à partir du serveur.git pull
fait ungit fetch
mais fusionne également le code de la branche de suivi dans votre version locale actuelle de cette branche. Si vous n'êtes pas encore prêt pour ces changements, tout d'git fetch
abord.la source
git fetch
récupérera les branches à distance afin que vous puissiezgit diff
ougit merge
eux avec la branche courante.git pull
exécutera la récupération sur le brach distant suivi par la branche actuelle, puis fusionnera le résultat. Vous pouvez utilisergit fetch
pour voir s'il existe des mises à jour de la branche distante sans les fusionner avec votre branche locale.la source
Git Fetch
Vous téléchargez les modifications apportées à votre succursale locale depuis l'origine via la récupération. Fetch demande au référentiel distant tous les commits que d'autres ont effectués, mais vous n'en avez pas sur votre référentiel local. Fetch télécharge ces validations et les ajoute au référentiel local.
Git Merge
Vous pouvez appliquer les modifications téléchargées via fetch à l'aide de la commande de fusion. La fusion prendra les commits récupérés de la récupération et essaiera de les ajouter à votre branche locale. La fusion conservera l'historique de validation de vos modifications locales afin que lorsque vous partagez votre branche avec push, Git sache comment les autres peuvent fusionner vos modifications.
Git Pull
L'extraction et la fusion s'exécutent assez souvent pour créer une commande combinant les deux, tirer. Pull effectue une extraction puis une fusion pour ajouter les validations téléchargées dans votre branche locale.
la source
La seule différence entre
git pull
etgit fetch
est que:git pull
tire d'une branche distante et la fusionne.git fetch
récupère uniquement à partir de la branche distante mais ne fusionne pasie git pull = git fetch + git merge ...
la source
rm -rf
recommencer. Stupide Git, s'il te plaît laisse-moi juste me mettre à jour pour que je puisse retourner au travail?En termes simples, si vous étiez sur le point de monter dans un avion sans connexion Internet ... avant de partir, vous pouvez simplement le faire
git fetch origin <master>
. Il récupérerait toutes les modifications dans votre ordinateur, mais le garderait séparé de votre développement / espace de travail local.Dans l'avion, vous pouvez apporter des modifications à votre espace de travail local, puis le fusionner avec ce que vous avez récupéré et résoudre les conflits de fusion potentiels sans connexion à Internet. Et à moins que quelqu'un n'ait apporté de nouvelles modifications contradictoires au référentiel distant, une fois arrivé à destination, vous ferez
git push origin <branch>
votre café.De ce formidable tutoriel Atlassian :
Avec
git pull
:git merge
.git fetch
ce qui n'affecte que votre.git/refs/remotes
, git pull affectera à la fois votre.git/refs/remotes
et.git/refs/heads/
Hmmm ... donc si je ne mets pas à jour la copie de travail avec
git fetch
, alors où dois-je faire les changements? Où Git Fetch stocke-t-il les nouveaux validations?Grande question. Il le place quelque part isolé de votre copie de travail. Mais encore une fois où? Découvrons-le.
Dans le répertoire de votre projet (c'est-à-dire où vous exécutez vos
git
commandes), procédez comme suit:ls
. Cela montrera les fichiers et répertoires. Rien de bien, je sais.Maintenant
ls -a
. Cela montrera les fichiers de points , à savoir, les fichiers commençant par.
Vous pourrez alors voir un répertoire nommé:.git
.cd .git
. Cela va évidemment changer votre répertoire.ls
. Vous verrez une liste de répertoires. Nous recherchonsrefs
. Faitescd refs
.heads
etremotes
. Utilisez aussicd
pour vérifier à l'intérieur.git fetch
que vous faites mettra à jour les éléments du/.git/refs/remotes
répertoire. Il ne mettra rien à jour dans le/.git/refs/heads
répertoire.git pull
fera d'abord lagit fetch
mise à jour des éléments dans le/.git/refs/remotes
répertoire, puis fusionnera avec votre section locale et changera la tête dans le/.git/refs/heads
répertoire.Une très bonne réponse connexe peut également être trouvée dans Où se place «git fetch»? .
Recherchez également la «notation Slash» dans le post sur les conventions de dénomination de la branche Git . Il vous aide à mieux comprendre comment Git place les choses dans différents répertoires.
Pour voir la différence réelle
Faites juste:
Si le maître distant a été mis à jour, vous obtiendrez un message comme celui-ci:
Si vous ne l'avez pas fait
fetch
et que vous l'avez fait,git checkout master
votre git local ne saurait pas qu'il y a 2 commits ajoutés. Et cela dirait simplement:Mais c'est obsolète et incorrect. C'est parce que git vous donnera des commentaires uniquement basés sur ce qu'il sait. Il est inconscient des nouveaux commits qu'il n'a pas encore baissé ...
Existe-t-il un moyen de voir les nouvelles modifications apportées à distance tout en travaillant sur la branche localement?
Certains IDE (par exemple Xcode) sont super intelligents et utilisent le résultat d'un
git fetch
et peuvent annoter les lignes de code qui ont été modifiées dans la branche distante de votre branche de travail actuelle. Si cette ligne a été modifiée à la fois par des modifications locales et une branche distante, cette ligne est annotée en rouge. Ce n'est pas un conflit de fusion. Il s'agit d'un conflit de fusion potentiel . C'est un headsup que vous pouvez utiliser pour résoudre le futur conflit de fusion avant de le faire àgit pull
partir de la branche distante.Conseil amusant:
Si vous avez récupéré une branche distante, par exemple:
Ensuite, cela irait dans votre répertoire télécommandes. Il n'est toujours pas disponible dans votre répertoire local. Cependant, cela simplifie votre paiement vers cette branche distante par DWIM (Faites ce que je veux dire):
vous n'avez plus besoin de faire:
Pour en savoir plus, lisez ici
la source
Git permet d'appliquer des validations chronologiquement plus anciennes après des validations plus récentes. Pour cette raison, l'acte de transfert des validations entre les référentiels est divisé en deux étapes:
Copie de nouveaux validations de la branche distante vers une copie de cette branche distante dans le référentiel local.
(opération repo to repo)
master@remote >> remote/origin/master@local
Intégration de nouveaux validations à la succursale locale
(opération repo interne)
remote/origin/master@local >> master@local
Il existe deux façons de procéder à l'étape 2. Vous pouvez:
En
git
terminologie, l'étape 1 estgit fetch
, l'étape 2 estgit merge
ougit rebase
git pull
estgit fetch
etgit merge
la source
Git obtient la branche de la dernière version de la télécommande vers la locale à l'aide de deux commandes:
git fetch: Git va obtenir la dernière version du distant au local, mais il ne fusionne pas automatiquement.
git fetch origin master
git log -p master..origin/master
git merge origin/master
Les commandes ci-dessus signifient que télécharger la dernière version de la branche principale depuis l'origine de la branche distante vers la branche principale d'origine. Et compare ensuite la branche principale locale et la branche principale d'origine. Enfin, fusionnez.
git pull: Git va obtenir la dernière version de la télécommande et la fusionner dans la locale.
git pull origin master
La commande ci-dessus est équivalente à
git fetch
etgit merge
. En pratique,git fetch
peut - être plus sûr car avant la fusion, nous pouvons voir les changements et décider de fusionner.la source
Pour comprendre cela, vous devez d'abord comprendre que votre git local gère non seulement votre référentiel local, mais également une copie locale du référentiel distant.
git fetch
met à jour votre copie locale du référentiel distant. Par exemple, si votre référentiel distant est GitHub - vous souhaiterez peut-être récupérer toutes les modifications apportées dans le référentiel distant vers votre copie locale du référentiel distant. Cela vous permettra d'effectuer des opérations telles que comparer ou fusionner.git pull
d'autre part, apportera les modifications dans le référentiel distant à l'endroit où vous conservez votre propre code. En règle générale,git pull
fera unegit fetch
première pour mettre à jour la copie locale du référentiel distant, puis il fusionnera les modifications dans votre propre référentiel de code et éventuellement votre copie de travail.la source
git pull == (git fetch + git merge)
git fetch ne change pas les branches locales.
Si vous avez déjà un référentiel local avec une configuration à distance pour le projet souhaité, vous pouvez récupérer toutes les branches et balises de la télécommande existante à l'aide de git fetch. ... Fetch n'apporte aucune modification aux branches locales, vous devrez donc fusionner une branche distante avec une branche locale appariée pour incorporer les nouvelles modifications fetch. de github
la source
Essayer d'être clair et simple.
La commande git pull est en fait une commande
shortcut
for git fetch suivie de la commande git merge ou de la commande git rebase selon votre configuration. Vous pouvez configurer votre référentiel Git de sorte que git pull soit une extraction suivie d'une rebase.la source
Une représentation graphique simple pour les débutants,
ici,
va récupérer le code du référentiel et rebaser avec votre local ... dans git pull il y a possibilité de création de nouveaux commits.
mais en ,
git fetch
va récupérer le code du référentiel et nous devons le rebaser manuellement en utilisant
git rebase
par exemple: je vais récupérer du maître du serveur et le rebaser dans mon maître local.
1) git pull (le rebase se fera automatiquement):
ici l' origine est votre maître repo à distance est votre branche
2) git fetch (besoin de rebaser manuellement):
il récupérera les modifications du serveur depuis l'origine. et il sera dans votre section locale jusqu'à ce que vous le rebasiez par vous-même. nous devons résoudre les conflits manuellement en vérifiant les codes.
cela rebasera le code en local. avant cela, assurez-vous que vous êtes dans la bonne branche.
la source
En fait, Git conserve une copie de votre propre code et du référentiel distant.
La commande
git fetch
met à jour votre copie locale en obtenant les données du référentiel distant. La raison pour laquelle nous en avons besoin est que quelqu'un d'autre a peut-être apporté des modifications au code et que vous souhaitez vous tenir à jour.La commande
git pull
apporte les modifications dans le référentiel distant à l'endroit où vous conservez votre propre code. Normalement,git pull
cela se fait en faisant un 'git fetch' d'abord pour mettre à jour la copie locale du référentiel distant, puis il fusionne les modifications dans votre propre référentiel de code et éventuellement votre copie de travail.la source