web-dev-qa-db-fra.com

Git Pull en ignorant les changements locaux?

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?

412
markdorison

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.

699
Cascabel

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
243
Artur Barseghyan

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'
23
Dr Beco

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
20
Victor
git fetch --all && git reset --hard Origin/master
9
Luca C.

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.

8
Seth Johnson

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.

8

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

2
Pablo Pazos

Cela va chercher la branche actuelle et tenter de faire une avance rapide à maîtriser:

git fetch && git merge --ff-only Origin/master
1
Petah

.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

0
Leo Bravo

Je fais habituellement:

git checkout .
git pull

Dans le dossier racine du projet.

0
Cassiano Franco