Eh bien, oui et non ...
Je comprends que vous voulez que vos copies locales "écrasent" ce qui se trouve dans la télécommande, mais, oh, mec, si quelqu'un a modifié les fichiers du dépôt distant d'une manière différente , vous ignorez simplement leurs modifications et essayez de "forcer" vos propres changements sans même regarder les conflits possibles, eh bien, je pleure pour vous (et vos collègues) ;-)
Cela dit, cependant, il est vraiment facile de faire la "bonne chose ..."
Étape 1:
git stash
dans votre repo local. Cela enregistrera vos mises à jour locales dans la réserve, puis rétablira vos fichiers modifiés dans leur état de pré-édition.
Étape 2:
git pull
pour obtenir les versions modifiées. Maintenant, j'espère que cela n'obtiendra pas de nouvelles versions des fichiers qui vous inquiètent. Si ce n'est pas le cas, l'étape suivante fonctionnera sans problème. Si c'est le cas , vous avez du travail à faire et vous serez heureux de l'avoir fait.
Étape 3:
git stash pop
Cela fusionnera vos versions modifiées que vous avez cachées à l'étape 1 avec les versions que vous venez d'extraire à l'étape 2. Si tout se passe bien, vous serez prêt!
Si, d'un autre côté, il y avait de réels conflits entre ce que vous avez extrait à l'étape 2 et vos modifications (en raison de la modification par quelqu'un d'autre dans l'intervalle), vous le découvrirez et vous serez invité à les résoudre. Fais le.
Les choses fonctionneront beaucoup mieux de cette façon - cela conservera probablement vos modifications sans aucun travail réel de votre part, tout en vous alertant sur des problèmes graves et sérieux.
git commit
des changements locaux avantgit pull
?Vous pouvez d'abord stocker vos modifications locales, puis extraire, puis faire apparaître la réserve.
Tout ce qui remplace les modifications de la télécommande aura des conflits que vous devrez résoudre manuellement.
la source
Vous avez donc validé vos modifications locales dans votre référentiel local. Ensuite, pour obtenir des modifications à distance dans votre référentiel local sans apporter de modifications à vos fichiers locaux, vous pouvez utiliser
git fetch
. En fait, ilgit pull
s'agit d'une opération en deux étapes: une opération non destructivegit fetch
suivie d'ungit merge
. Voir Quelle est la différence entre «git pull» et «git fetch»?pour plus de discussion.Exemple détaillé:
Supposons que votre référentiel ressemble à ceci (vous avez apporté des modifications
test2
:Et le
origin
référentiel est comme ça (quelqu'un d'autre s'est engagétest1
):À ce stade, git se plaindra et vous demandera de tirer d'abord si vous essayez de pousser votre
test2
dépôt vers un dépôt distant. Si vous voulez voir ce qu'est test1 sans modifier votre référentiel local, exécutez ceci:Votre référentiel local de résultats ressemblerait à ceci:
Vous avez maintenant les modifications distantes dans une autre branche et vous gardez vos fichiers locaux intacts.
Alors quelle est la prochaine étape? Vous pouvez faire un
git merge
, qui aura le même effet quegit pull
(lorsqu'il est combiné avec le précédentgit fetch
), ou, comme je préférerais, faire ungit rebase origin/master
pour appliquer votre changement par-dessusorigin/master
, ce qui vous donne un historique plus propre.la source