Comment puis-je extraire des fichiers à distance sans écraser les fichiers locaux?

J’essaie de mettre en place un nouveau repository git sur un repo distant existant.

Je veux que mes fichiers locaux écrasent le repository à distance, mais git dit que je dois d’abord extraire ces fichiers distants et les fusionner.

Est-il possible de tirer mais assurez-vous que les fichiers locaux ne sont pas écrasés par la télécommande?

Eh bien oui et non …

Je comprends que vous voulez que vos copies locales “remplacent” ce qui est dans la télécommande, mais, oh, mec, si quelqu’un a modifié les fichiers du repo distant d’une manière différente , et que vous ignorez 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 sauvera vos mises à jour locales dans la réserve, puis ramènera vos fichiers modifiés à leur état de pré-édition.

Étape 2:

 git pull 

pour obtenir des versions modifiées. Maintenant, espérons que cela n’obtiendra aucune nouvelle version des fichiers qui vous inquiètent. Si ce n’est pas le cas, la prochaine étape fonctionnera sans problème. Si c’est le cas , alors 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 de faire à l’étape 2. Si tout se passe bien, alors vous serez tous prêts!

Si, d’un autre côté, il y avait de véritables conflits entre ce que vous avez tiré à l’étape 2 et vos modifications (à cause de quelqu’un qui a modifié entre-temps), vous découvrirez et vous serez invité à les résoudre. Fais le.

Les choses vont aller beaucoup mieux de cette façon – cela permettra probablement de garder vos changements sans aucun travail réel de votre part, tout en vous alertant sur des problèmes sérieux et sérieux.

Vous pouvez d’abord ranger vos modifications locales, puis tirer, puis faire apparaître la réserve.

 git stash git pull origin master git stash pop 

Tout ce qui remplace les modifications à distance aura des conflits que vous devrez résoudre manuellement.

Vous avez donc engagé vos modifications locales dans votre référentiel local. Ensuite, pour obtenir des modifications à distance sur votre référentiel local sans modifier vos fichiers locaux, vous pouvez utiliser git fetch . En fait, git pull est une opération en deux étapes: une git fetch non destructive suivie d’une git merge . Voir Quelle est la différence entre ‘git pull’ et ‘git fetch’? pour plus de discussion.

Exemple détaillé:

Supposons que votre repository soit comme ça (vous avez apporté des modifications à test2 :

 * ed0bcb2 - (HEAD, master) test2 * 4942854 - (origin/master, origin/HEAD) first 

Et le repository d’ origin est comme ça (quelqu’un d’autre a commis test1 ):

 * 5437ca5 - (HEAD, master) test1 * 4942854 - first 

À ce moment, git va se plaindre et vous demander de tirer en premier si vous essayez de pousser votre test2 vers un référentiel distant. Si vous voulez voir ce que test1 est sans modifier votre référentiel local, exécutez ceci:

 $ git fetch 

Votre repository local de résultats serait comme ceci:

 * ed0bcb2 - (HEAD, master) test2 | * 5437ca5 - (origin/master, origin/HEAD) test1 |/ * 4942854 - first 

Vous avez maintenant les modifications à distance dans une autre twig et vous conservez vos fichiers locaux intacts.

Alors quelle est la prochaine? Vous pouvez faire une git merge , qui aura le même effet que git pull (lorsqu’elle est combinée avec la git fetch précédente), ou, comme je le préférerais, faire une git rebase origin/master pour appliquer votre modification , qui vous donne une histoire plus propre.