Je veux synchroniser mon référentiel local avec un référentiel distant afin que mon référentiel local devienne une copie à 100% du référentiel distant - ce qui signifie que si certains fichiers diffèrent dans ces référentiels, nous remplaçons les locaux par les distants, et s'il y en a fichiers dans des référentiels locaux qui n'existent pas dans la télécommande, les fichiers locaux sont supprimés.
Existe-t-il un moyen d'y parvenir autrement qu'en faisant un nouveau clone de référentiel distant?
Question similaire à Sync local git repo with remote in one shot discarding local changes / commits .
git fetch --prune
Réponses:
la source
git pull -p
fait la même chose - 'git pull exécute git fetch avec les paramètres donnés et appelle git merge pour fusionner les têtes de branche récupérées dans la branche actuelle' - git-scm.com/docs/git-pullgit fetch <remote> --prune
, au cas où quelqu'un n'aurait besoin que d'--prune
une télécommande spécifique. par exemple.git fetch upstream --prune
.git fetch origin --prune
pour synchroniser votre repo local avec votre fork d'unupstream
projetCes étapes le feront:
puis sans
-n
Cela prendra en charge tous les changements locaux. Maintenant, les commits ...
et notez la ligne telle que:
Prenez note du numéro «N» maintenant:
et enfin:
ne doit rien montrer à ajouter / valider. Tout propre.
Cependant, un nouveau clone peut faire de même (mais est beaucoup plus lent).
=== Mise à jour ===
Comme mes connaissances git se sont légèrement améliorées au fil du temps, j'ai trouvé une autre façon plus simple de faire de même. Voici comment (# avec explication). Dans votre branche de travail:
Bien que vos validations et modifications locales disparaissent de la vue après cela, il est possible de récupérer les modifications validées, si nécessaire.
la source
Vous devez comprendre qu'un référentiel Git n'est pas seulement une arborescence de répertoires et de fichiers, mais stocke également un historique de ces arborescences - qui peuvent contenir des branches et des fusions.
Lors de la récupération à partir d'un référentiel, vous y copiez tout ou partie des branches dans votre référentiel. Celles-ci sont ensuite dans votre référentiel en tant que "branches de suivi à distance", par exemple des branches nommées comme
remotes/origin/master
ou telles.La récupération de nouvelles validations à partir du référentiel distant ne changera rien à votre copie de travail locale.
Votre copie de travail a normalement un commit extrait, appelé
HEAD
. Ce commit est généralement la pointe de l'une de vos succursales locales.Je pense que vous souhaitez mettre à jour votre branche locale (ou peut-être toutes les branches locales?) Vers la branche distante correspondante, puis consultez la dernière branche.
Pour éviter tout conflit avec votre copie de travail (qui pourrait avoir des modifications locales), vous devez d'abord nettoyer tout ce qui n'est pas versionné (en utilisant
git clean
). Ensuite, vous extrayez la branche locale correspondant à la branche distante que vous souhaitez mettre à jour et utilisezgit reset
pour la basculer vers la branche distante récupérée. (git pull
incorporera toutes les mises à jour de la branche distante dans votre branche locale, ce qui pourrait faire de même, ou créera une validation de fusion si vous avez des validations locales.)(Mais alors vous perdrez vraiment toutes les modifications locales - à la fois dans la copie de travail et les validations locales. Assurez-vous que vous le voulez vraiment - sinon, utilisez mieux une nouvelle branche, cela enregistre vos validations locales. Et utilisez
git stash
pour enregistrer les modifications qui ne sont pas encore validées .)Modifier: si vous n'avez qu'une seule branche locale et que vous suivez une branche distante, tout ce que vous avez à faire est de
depuis l'intérieur du répertoire de travail.
Cela récupérera la version actuelle de toutes les branches distantes suivies et mettra à jour la branche actuelle (et le répertoire de travail) vers la version actuelle de la branche distante qu'elle suit.
la source
git pull
devrait suffire, je pense. (J'ai mis à jour la réponse.)Vous voulez faire
Cela rend votre dépôt local exactement comme votre dépôt distant.
N'oubliez pas de remplacer l'origine et le maître par la télécommande et la branche avec lesquelles vous souhaitez vous synchroniser.
la source
node_modules
, il fonctionne exactement comme je le souhaite.Réinitialiser et synchroniser le référentiel local avec la branche distante
La commande: N'oubliez pas de remplacer origine et maître par la télécommande et la branche avec lesquelles vous souhaitez vous synchroniser.
Ou pas à pas:
Votre branche locale est maintenant une copie exacte (commits et tout) de la branche distante.
Sortie de commande:
Voici un exemple d'exécution de la commande sur un clone local du référentiel Forge a git.
la source
(Ces informations proviennent du manuel de l'utilisateur de Git )
J'apprends aussi, donc ce n'est peut-être pas exactement une réponse à la question, mais cela pourrait aider quelqu'un:
git branch -r
)git fetch
. Cela n'affectera aucun de vos succursales existantes créées sur mesure.git add origin /path/to/repository
) utilisergit checkout origin/branch_name
, cela remplacera vos modifications locales sur la branchebranch_name
la source
On dirait que vous voulez un miroir du référentiel distant:
Cette commande crée un référentiel nu. Si vous ne voulez pas d'un référentiel nu, les choses deviennent plus compliquées.
la source
Si vous parlez de synchroniser un dépôt fourchu, vous pouvez suivre ces étapes.
Comment synchroniser un référentiel fork depuis git
vérifiez votre branche git actuelle
git branch
caisse à maîtriser si vous n'êtes pas maître
git checkout master
Récupérez le référentiel en amont si vous disposez des droits d'accès corrects
git fetch upstream
Si vous obtenez une erreur en dessous, exécutez
git remote add upstream [email protected]:upstream_clone_repo_url/xyz.git
Exécutez maintenant la commande ci-dessous.
git fetch upstream
Maintenant, si vous êtes maître, fusionnez l'amont / maître dans la branche maître
git merge upstream/master
C'est tout!!
Vérification croisée via la
git remote
commande, plus spécifiquegit remote -v
Si j'ai également des droits de validation sur le référentiel en amont, je peux créer une branche en amont locale et effectuer un travail qui ira en amont.
la source
Vous pouvez utiliser des crochets git pour cela. Il suffit de créer un hook qui pousse le changement vers l'autre référentiel après une mise à jour.
Bien sûr, vous pouvez obtenir des conflits de fusion, vous devez donc trouver comment les gérer.
la source