Y a-t-il un moyen de faire un git pull
qui ignore toute modification de fichier local sans détruire le répertoire et sans avoir à effectuer un git clone
?
Si vous voulez dire que vous voulez que le texte écrase les modifications locales, effectuez la fusion comme si l’arborescence de travail était propre, eh bien, nettoyez l’arbre de travail:
git reset --hard
git pull
S'il existe des fichiers locaux non suivis, vous pouvez utiliser git clean
pour les supprimer. Utilisez git clean -f
pour supprimer les fichiers non suivis, -df
pour supprimer les fichiers et les répertoires non suivis et -xdf
pour supprimer les fichiers ou les répertoires non suivis ou ignorés.
Si, par contre, vous souhaitez conserver les modifications locales, vous pouvez utiliser cachette pour les cacher avant de les extraire, puis les réappliquer plus tard:
git stash
git pull
git stash pop
Je ne pense pas qu'il soit logique de littéralement ignorer les modifications, bien que - la moitié de l'attraction soit une fusion, et elle doit fusionner les versions validées du contenu avec les versions extraites.
Pour moi, ce qui suit a fonctionné:
(1) D'abord, récupérez toutes les modifications:
$ git fetch --all
(2) Puis réinitialisez le maître:
$ git reset --hard Origin/master
(3) Tirez/mettez à jour:
$ git pull
La commande ci-dessous ne fonctionnera pas toujours. Si vous ne faites que:
$ git checkout thebranch
Already on 'thebranch'
Your branch and 'Origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.
$ git reset --hard
HEAD is now at b05f611 Here the commit message bla, bla
$ git pull
Auto-merging thefile1.c
CONFLICT (content): Merge conflict in thefile1.c
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
etc...
Pour vraiment recommencer, télécharger la branche et écraser toutes vos modifications locales, il suffit de faire:
$ git checkout thebranch
$ git reset --hard Origin/thebranch
Cela fonctionnera très bien.
$ git checkout thebranch
Already on 'thebranch'
Your branch and 'Origin/thebranch' have diverged,
and have 23 and 7 different commits each, respectively.
$ git reset --hard Origin/thebranch
HEAD is now at 7639058 Here commit message again...
$ git status
# On branch thebranch
nothing to commit (working directory clean)
$ git checkout thebranch
Already on 'thebranch'
Vous voulez juste une commande qui donne exactement le même résultat que rm -rf local_repo && git clone remote_url
, n'est-ce pas? Je veux aussi cette fonctionnalité. Je me demande pourquoi git ne fournit pas une telle commande (telle que git reclone
ou git sync
), ni svn ne fournit une telle commande (telle que svn recheckout
ou svn sync
).
Essayez la commande suivante:
git reset --hard Origin/master
git clean -fxd
git pull
git fetch --all && git reset --hard Origin/master
Regardez git stash pour mettre toutes vos modifications locales dans un "fichier stash" et revenir au dernier commit. À ce stade, vous pouvez appliquer vos modifications stockées ou les supprimer.
Si vous êtes sur Linux:
git fetch
for file in `git diff Origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull
La boucle for supprimera tous les fichiers suivis qui sont modifiés dans le référentiel local. git pull
fonctionnera donc sans aucun problème.
La chose la plus agréable à propos de cela est que seuls les fichiers suivis seront écrasés par les fichiers du référentiel, tous les autres fichiers ne seront pas modifiés.
cela a fonctionné pour moi
git fetch --all
git reset --hard Origin/master
git pull Origin master
avec la réponse acceptée je reçois des erreurs de conflit
Cela va chercher la branche actuelle et tenter de faire une avance rapide à maîtriser:
git fetch && git merge --ff-only Origin/master
.gitignore
"L'ajout de fichiers indésirables à .gitignore fonctionne tant que vous ne les avez pas initialement engagés dans une branche."
Aussi, vous pouvez exécuter:
git update-index --assume-nom de fichier non modifié
https://chamindac.blogspot.com/2017/07/ignoring-visual-studio-2017-created.html
Je fais habituellement:
git checkout .
git pull
Dans le dossier racine du projet.