git: Comment obtenir la dernière version de mon code?


200

J'utilise Git 1.7.4.1. Je veux obtenir la dernière version de mon code à partir du référentiel, mais je reçois des erreurs ...

$ git pull
….
M   selenium/ant/build.properties
….
M   selenium/scripts/linux/get_latest_updates.sh
M   selenium/scripts/windows/start-selenium.bat
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'.

J'ai supprimé les copies locales des fichiers dont l'outil se plaint, mais je reçois toujours les erreurs. Comment extraire la dernière version du référentiel distant? - Dave


1
@ La réponse de Kzqai ci-dessous m'a aidé: essayez simplement de faire d' git fetchabord. Je n'obtenais pas de conflits, mais c'est ainsi que j'ai obtenu la dernière version du code.
Chris K

Réponses:


258

Si vous ne vous souciez pas des modifications locales (y compris les fichiers ou les sous-dépôts non suivis ou générés qui se trouvent juste ici) et souhaitez simplement une copie du dépôt:

git reset --hard HEAD
git clean -xffd
git pull

Encore une fois, cela nuancera toutes les modifications que vous avez apportées localement, alors utilisez-les soigneusement. Pensez à rm -Rffaire cela.


1
J'ai essayé ces commandes et j'ai toujours eu l'erreur "CONFLICT (contenu): Fusionner les conflits dans selenium / ant / build.xml" (entre autres). Je veux juste écraser la dernière version de mon fichier avec ce qui est dans le dépôt. Que puis-je faire??
Dave

31
git clean -fne fait pas vraiment partie de la réponse. Il supprimera les fichiers qui ne sont pas conservés dans le référentiel (par exemple, dans mon cas, les fichiers journaux); vous n'avez pas besoin de faire cela pour vous remettre au git pulltravail, c'est juste git reset --hard HEADassez.
Darren Cook

12
Esh, mec, ne recommande pas l'une des rares commandes de suppression pour git les débutants.
Kzqai

6
@DarrenCook Je pense que git clean -fc'est important si vous voulez un vrai nettoyage de votre référentiel. C'est l'équivalent de faire un "Supprimer tout du dossier -> Obtenir la dernière version / Obtenir spécifique" dans TFS et dans mon cas, c'est ce que je voulais.
RPDeshaies

3
@Darren Je pense que git clean -f '' est également important. Je souhaite obtenir la dernière version et je ne souhaite pas conserver les entrées de caches obsolètes ou d'autres ressources générées qui ne figurent pas sur le référentiel. La réponse est claire sur le fait qu'il supprimera les modifications locales et imitera la dernière version du référentiel, donc cela me semble parfait. Je déplacerais mes fichiers journaux vers un autre endroit si j'ai vraiment besoin de les conserver entre les mises à jour.
Balmipour

231

Cas 1: ne vous souciez pas des changements locaux

  • Solution 1: obtenir le dernier code et réinitialiser le code

    git fetch origin
    git reset --hard origin/[tag/branch/commit-id usually: master]
    
  • Solution 2: supprimez le dossier et clonez à nouveau: D

    rm -rf [project_folder]
    git clone [remote_repo]
    

Cas 2: attention aux changements locaux

  • Solution 1: aucun conflit avec la nouvelle version en ligne

    git fetch origin
    git status
    

    rapportera quelque chose comme:

    Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
    

    Obtenez ensuite la dernière version

    git pull
    
  • Solution 2: conflits avec la nouvelle version en ligne

    git fetch origin
    git status
    

    rapportera quelque chose comme:

    error: Your local changes to the following files would be overwritten by merge:
        file_name
    Please, commit your changes or stash them before you can merge.
    Aborting
    

    Engagez vos changements locaux

    git add .
    git commit -m ‘Commit msg’
    

    Essayez d'obtenir les modifications (échouera)

    git pull
    

    rapportera quelque chose comme:

    Pull is not possible because you have unmerged files.
    Please, fix them up in the work tree, and then use 'git add/rm <file>'
    as appropriate to mark resolution, or use 'git commit -a'.
    

    Ouvrez le fichier de conflit et corrigez le conflit. Ensuite:

    git add .
    git commit -m ‘Fix conflicts’
    git pull
    

    rapportera quelque chose comme:

    Already up-to-date.
    

Plus d'informations: Comment utiliser «git reset --hard HEAD» pour revenir à un commit précédent?


@ tvl.Comment puis-je obtenir les dernières mises à jour sans engager mon code (ont des conflits) sur branch..please help me
user3354457

@ user3354457 xm, question intéressante. Je n'ai jamais essayé cela auparavant mais vous pouvez l'essayer et faire un rapport;) donc: - Faites un patch avec les changements: git diff> uncommited-changes.patch - Réinitialisez la branche - tirez les changements - appliquez le patch
tvl

3
Cette réponse mérite beaucoup plus de votes positifs que celle qui a été acceptée comme réponse.
James

@James :) Je suis content que ma réponse vous aide. Astuce, essayez d'écrire de la documentation comme si vous ne saviez rien sur un sujet et la verbosité vous aidera certainement.
tvl

4
Meilleure réponse complète pour git fetch. Ce message devrait être verrouillé
Callat

17

Je soupçonne que ce qui s'est passé peut être que vous avez supprimé les fichiers que vous avez modifiés (parce que vous ne vous êtes pas souciés de ces changements) et maintenant git considère la suppression comme un changement.

Voici une approche qui déplace vos modifications hors de votre copie de travail et dans la "cachette" (récupérable s'il s'avère que vous en avez besoin à nouveau), afin que vous puissiez ensuite retirer les dernières modifications de l'amont.

git stash  
git pull

Si jamais vous souhaitez récupérer vos fichiers (conflits potentiels avec les modifications en amont et tout), exécutez un git stash applypour coller ces modifications au-dessus de votre code. De cette façon, vous avez une approche "annuler".


1
Je recommanderais probablement d'utiliser à git stash popmoins que vous ne vouliez un historique de vos cachettes git
Rapnar

7

Vous devez d'abord fusionner vos fichiers. Faites un git statuspour voir quels sont les fichiers qui doivent être fusionnés (cela signifie que vous devez d'abord résoudre les conflits). Une fois cela fait, faites git add file_mergedet pullrecommencez.


2
Merci. J'étais confronté à ce problème. J'ai des changements dans mes fichiers de travail, que je ne veux pas valider. Mais je ne peux pas faire un git pull dans ce cas. Donc je fais - git stash, git pull --rebase, git stash pop. Puis fusionnez manuellement et ajoutez git file_merged
RuntimeException

6

essayez ce code

cd /go/to/path
git pull origin master

5
Bienvenue sur Stackoverflow! Veuillez envisager d'ajouter quelques explications à votre solution pour mieux décrire comment elle résout le problème. Cela rendra vos réponses encore plus utiles
dkackman

2

Si vous voulez simplement tout jeter dans votre dossier de travail (par exemple, les résultats d'une fusion échouée ou abandonnée) et revenir à un commit précédent, faites a git reset --hard.


1

Je comprends que vous souhaitez supprimer vos modifications locales et retirer le contenu de votre télécommande?

Si tout le reste échoue, et si vous avez (tout à fait compréhensible) peur de "réinitialiser", la chose la plus simple est simplement de cloner l'origine dans un nouveau répertoire et de jeter votre ancien.


1

En exécutant cette commande, vous obtiendrez la balise la plus récente qui correspond généralement à la version de votre projet:

git describe --abbrev=0 --tags

0

Il me semble que vous rencontrez des problèmes avec core.autocrlf. core.autocrlf = true peut poser des problèmes comme ceux que vous décrivez sous Windows si des sauts de ligne CRLF ont été archivés dans le référentiel. Essayez de désactiver core.autocrlf pour le référentiel et effectuez une réinitialisation matérielle.


0

Si vous utilisez Git GUI, commencez par récupérer puis fusionnez.

Récupérer via le menu à distance >> Récupérer >> Origine. Fusionner via le menu Fusionner >> Fusionner local.

La boîte de dialogue suivante apparaît.

entrez la description de l'image ici

Sélectionnez le bouton radio de la branche de suivi (également sélectionné par défaut), laissez la case jaune vide et appuyez sur fusion et cela devrait mettre à jour les fichiers.

J'avais déjà annulé certains changements locaux avant de faire ces étapes car je voulais les supprimer de toute façon, je n'ai donc pas à les éliminer via la fusion plus tard.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.