git: come posso ottenere l'ultima versione del mio codice?


200

Sto usando Git 1.7.4.1. Voglio ottenere l'ultima versione del mio codice dal repository, ma sto ricevendo errori ...

$ 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'.

Ho eliminato le copie locali dei file di cui si lamenta lo strumento, ma continuo a ricevere gli errori. Come posso controllare l'ultima versione dal repository remoto? - Dave


1
@ La risposta di Kzqai qui sotto mi ha aiutato: prova git fetchprima a fare . Non ho avuto conflitti, ma è così che ho ottenuto l'ultima versione del codice.
Chris K,

Risposte:


258

Se non ti interessano le modifiche locali (inclusi file o sottorepository non tracciati o generati che si trovano qui) e desideri semplicemente una copia dal repository:

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

Ancora una volta, questo annulla tutte le modifiche apportate localmente, quindi usalo con attenzione. Pensa a rm -Rfquando lo fai.


1
Ho provato questi comandi e ho ancora ricevuto l'errore "CONFLICT (contenuto): unisci conflitto in selenio / ant / build.xml" (tra gli altri). Voglio solo sovrascrivere l'ultima versione del mio file con ciò che è nel repository. Cosa posso fare??
Dave,

31
git clean -fnon fa davvero parte della risposta. Elimina i file che non vengono conservati nel repository (ad esempio, nel mio caso, i file di registro); non è necessario farlo per riprendere a git pulllavorare, git reset --hard HEADè sufficiente.
Darren Cook,

12
Esh, amico, non raccomandare uno dei pochi comandi di eliminazione per dare ai neofiti.
Kzqai,

6
@DarrenCook Penso che git clean -fsia importante se vuoi una vera pulizia del tuo deposito. È l'equivalente di fare un "Elimina tutto dalla cartella -> Ottieni l'ultima versione / Ottieni specifico" in TFS e nel mio caso, questo è quello che volevo.
RPDeshaies

3
@Darren Penso che anche git clean -f`` sia importante. Voglio ottenere la versione più recente e non voglio conservare voci cache obsolete o altre risorse generate che non sono presenti nel repository. La risposta è chiara sul fatto che rimuoverà le modifiche locali e imiterà l'ultima versione dal repository, quindi mi sembra perfetto. Sposterei i miei file di registro in un altro posto se dovessi davvero tenerli tra gli aggiornamenti.
Balmipour,

231

Caso 1: non preoccuparti delle modifiche locali

  • Soluzione 1: ottenere il codice più recente e reimpostare il codice

    git fetch origin
    git reset --hard origin/[tag/branch/commit-id usually: master]
    
  • Soluzione 2: eliminare la cartella e clonare nuovamente: D

    rm -rf [project_folder]
    git clone [remote_repo]
    

Caso 2: cura delle modifiche locali

  • Soluzione 1: nessun conflitto con la nuova versione online

    git fetch origin
    git status
    

    segnalerà qualcosa come:

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

    Quindi ottenere l'ultima versione

    git pull
    
  • Soluzione 2: conflitti con la nuova versione online

    git fetch origin
    git status
    

    segnalerà qualcosa come:

    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
    

    Impegnare le modifiche locali

    git add .
    git commit -m ‘Commit msg’
    

    Prova a ottenere le modifiche (fallirà)

    git pull
    

    segnalerà qualcosa come:

    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'.
    

    Apri il file del conflitto e correggi il conflitto. Poi:

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

    segnalerà qualcosa come:

    Already up-to-date.
    

Ulteriori informazioni: Come posso usare 'git reset --hard HEAD' per ripristinare un commit precedente?


@ tvl.Come posso ottenere gli ultimi aggiornamenti senza impegnare il mio codice (ho conflitti) in branch..per favore aiutatemi
user3354457

@ user3354457 xm, domanda interessante. Non l'ho mai provato prima, ma potresti provarlo e riportarlo indietro;) quindi: - Crea una patch con le modifiche: git diff> uncommited-changes.patch - Ripristina il ramo - tira le modifiche - applica la patch
tvl

3
Questa risposta merita molti più voti rispetto a quella che è stata accettata come risposta.
James,

@James :) Sono contento che la mia risposta ti aiuti. Suggerimento, prova a scrivere documentazione come se non sapessi nulla su un argomento e sicuramente la verbosità ti aiuterà.
TVl

4
La migliore risposta completa per git fetch. Questo post dovrebbe essere bloccato
Callat

17

Ho il sospetto che ciò che è successo potrebbe essere che hai eliminato i file che hai modificato (perché non ti importava di quelle modifiche) e ora Git sta prendendo la cancellazione per essere un cambiamento.

Ecco un approccio che sposta le tue modifiche dalla tua copia di lavoro e nella "scorta" (recuperabile nel caso in cui si scopre che ne hai di nuovo bisogno), in modo da poter quindi estrarre le ultime modifiche dall'upstream.

git stash  
git pull

Se vuoi mai recuperare i tuoi file (potenziali conflitti con modifiche a monte e tutto il resto), esegui a git stash applyper incollare quelle modifiche sopra il tuo codice. In questo modo, hai un approccio "annulla".


1
Probabilmente consiglierei di usarlo a git stash popmeno che tu non voglia una storia delle tue git git
Rapnar,

7

Devi prima unire i tuoi file. Fai un git statusper vedere quali sono i file che devono essere uniti (significa che devi prima risolvere i conflitti). Una volta fatto questo, fai git add file_mergede fai di pullnuovo il tuo .


2
Grazie. Stavo affrontando questo problema. Ho alcuni cambiamenti nei miei file di lavoro, che non voglio impegnare. Ma in questo caso non posso fare una git pull. Quindi lo faccio - git stash, git pull --rebase, git stash pop. Quindi unisci e aggiungi manualmente aggiungi file_merged
RuntimeException il

6

prova questo codice

cd /go/to/path
git pull origin master

5
Benvenuto su Stackoverflow! Si prega di considerare di aggiungere alcune spiegazioni alla soluzione per descrivere meglio come risolve il problema. Ciò renderà le tue risposte ancora più utili
dkackman il

2

Se vuoi semplicemente buttare via tutto nella cartella di lavoro (ad es. I risultati di una fusione fallita o interrotta) e tornare a un commit precedente pulito, esegui a git reset --hard.


1

Capisco che desideri eliminare le modifiche locali e rimuovere ciò che è presente sul telecomando?

Se tutto il resto fallisce e se hai (abbastanza comprensibilmente) paura di "resettare", la cosa più semplice è solo clonare l'origine in una nuova directory e distruggere quella vecchia.


1

Eseguendo questo comando otterrai il tag più recente che di solito è la versione del tuo progetto:

git describe --abbrev=0 --tags

0

Mi sembra che tu abbia problemi core.autocrlf. core.autocrlf = true può dare problemi come quelli che descrivi su Windows se le nuove righe CRLF sono state archiviate nel repository. Prova a disabilitare core.autocrlf per il repository ed esegui un hard reset.


0

Se si utilizza la GUI di Git, recuperare prima, quindi unire.

Recupera tramite menu remoto >> Recupera >> Origine. Unisci tramite il menu Unisci >> Unisci locale.

Viene visualizzata la seguente finestra di dialogo.

inserisci qui la descrizione dell'immagine

Seleziona il pulsante di opzione Ramo di monitoraggio (anche per impostazione predefinita selezionato), lascia vuota la casella gialla e premi Unisci e questo dovrebbe aggiornare i file.

Avevo già ripristinato alcune modifiche locali prima di eseguire questi passaggi poiché volevo scartarli comunque, quindi non devo eliminare tramite unione in un secondo momento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.