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.