version-control force push - Come impongo "git pull" per sovrascrivere i file locali?





15 Answers

Prova questo:

git reset --hard HEAD
git pull

Dovrebbe fare quello che vuoi.

stash hard github

Come posso forzare una sovrascrittura di file locali su un git pull ?

Lo scenario sta seguendo:

  • Un membro del team sta modificando i modelli per un sito web su cui stiamo lavorando
  • Aggiungono alcune immagini alla directory delle immagini (ma dimentica di aggiungerle sotto il controllo del codice sorgente)
  • Stanno inviando le immagini per posta, più tardi, a me
  • Sto aggiungendo le immagini sotto il controllo del codice sorgente e inserendole in GitHub insieme ad altre modifiche
  • Non possono estrarre gli aggiornamenti da GitHub perché Git non vuole sovrascrivere i loro file.

Questo è l'errore che sto ottenendo:

error: Untracked working tree file 'public/images/icon.gif' would be overwritten by merge

Come faccio a forzare Git a sovrascriverli? La persona è un designer - di solito risolvo tutti i conflitti a mano, quindi il server ha la versione più recente che devono solo aggiornare sul proprio computer.




Come Riccio penso che le risposte siano terribili. Ma anche se la risposta di Hedgehog potrebbe essere migliore, non penso che sia così elegante come potrebbe essere. Il modo in cui ho trovato di farlo è utilizzando "fetch" e "merge" con una strategia definita. Il che dovrebbe fare in modo che le modifiche locali vengano mantenute purché non siano uno dei file con cui si tenta di forzare una sovrascrittura.

Prima fai un commit delle tue modifiche

 git add *
 git commit -a -m "local file server commit message"

Quindi recuperare le modifiche e sovrascrivere se c'è un conflitto

 git fetch origin master
 git merge -s recursive -X theirs origin/master

"-X" è un nome di opzione e "loro" è il valore per tale opzione. Stai scegliendo di utilizzare le "loro" modifiche, invece delle "tue" modifiche se c'è un conflitto.




Sembra che il modo migliore sia fare prima:

git clean

Per eliminare tutti i file non tracciati e quindi continuare con il solito git pull ...




Potresti trovare utile questo comando per eliminare le modifiche locali:

git checkout <your-branch> -f

E poi fai una pulizia (rimuove i file non tracciati dall'albero di lavoro):

git clean -f

Se si desidera rimuovere le directory non tracciate oltre ai file non tracciati:

git clean -fd



L'unica cosa che ha funzionato per me è stata:

git reset --hard HEAD~5

Questo ti riporterà cinque commit e poi con

git pull

L'ho trovato cercando come annullare una fusione Git .




Ho avuto lo stesso problema. Nessuno mi ha dato questa soluzione, ma ha funzionato per me.

L'ho risolto da:

  1. Cancellare tutti i file. Lascia solo la directory .git.
  2. git reset --hard HEAD
  3. git pull
  4. git push

Ora funziona.




Ho avuto un problema simile. Dovevo fare questo:

git reset --hard HEAD
git clean -f
git pull



Ho riassunto altre risposte. Puoi eseguire git pull senza errori:

git fetch --all
git reset --hard origin/master
git reset --hard HEAD
git clean -f -d
git pull

Attenzione : questo script è molto potente, quindi potresti perdere le tue modifiche.




Credo che ci siano due possibili cause di conflitto, che devono essere risolte separatamente, e per quanto posso dire, nessuna delle risposte di cui sopra si occupa di entrambi:

  • I file locali che non sono tracciati devono essere eliminati, manualmente (più sicuro) o come suggerito in altre risposte, da git clean -f -d

  • Anche i commit locali che non sono sul ramo remoto devono essere cancellati. IMO il modo più semplice per ottenere questo è con: git reset --hard origin/master (sostituisci 'master' con qualsiasi ramo su cui stai lavorando, ed esegui prima una git fetch origin )




Sembra che la maggior parte delle risposte qui siano focalizzate sul ramo master ; tuttavia, ci sono momenti in cui sto lavorando sullo stesso ramo di funzionalità in due luoghi diversi e voglio che un rebase in uno si rifletta nell'altro senza un sacco di salti mortali.

Basato su una combinazione di risposta di RNA e risposta di torek a una domanda simile , ho trovato questo che funziona splendidamente:

git fetch
git reset --hard @{u}

Esegui questo da un ramo e reimposterà solo il tuo ramo locale alla versione upstream.

Questo può anche essere inserito in un alias git forcepull ( git forcepull ):

git config alias.forcepull "!git fetch ; git reset --hard @{u}"

Oppure, nel tuo file .gitconfig :

[alias]
  forcepull = "!git fetch ; git reset --hard @{u}"

Godere!




L'ho appena risolto da solo:

git checkout -b tmp # "tmp" or pick a better name for your local changes branch
git add -A
git commit -m 'tmp'
git pull
git checkout master # Or whatever branch you were on originally
git pull
git diff tmp

dove l'ultimo comando fornisce un elenco delle modifiche locali. Continua a modificare il ramo "tmp" finché non è accettabile e quindi unisci di nuovo a master con:

git checkout master && git merge tmp

Per la prossima volta, probabilmente puoi gestirlo in un modo più pulito cercando "git stash branch", anche se lo stash rischia di causare problemi nei primi tentativi, quindi fai il primo esperimento su un progetto non critico ...




Questi quattro comandi funzionano per me.

git reset --hard HEAD
git checkout origin/master
git branch -D master
git checkout -b master

Per controllare / tirare dopo aver eseguito questi comandi

git pull origin master

Ho provato molto ma alla fine ho avuto successo con questi comandi.




Basta fare

git fetch origin branchname
git checkout -f origin/branchname // This will overwrite ONLY new included files
git checkout branchname
git merge origin/branchname

In questo modo si evitano tutti gli effetti collaterali indesiderati, come l'eliminazione di file o directory che si desidera conservare, ecc.




Conosco un metodo molto più semplice e meno doloroso:

$ git branch -m [branch_to_force_pull] tmp
$ git fetch
$ git checkout [branch_to_force_pull]
$ git branch -D tmp

Questo è tutto!




Requisiti:

  1. Tieni traccia dei cambiamenti locali così nessuno li perde mai.
  2. Rendere il repository locale corrispondente al repository di origine remoto.

Soluzione:

  1. Conserva le modifiche locali.
  2. Scarica con una pulizia di file e directory ignorando .gitignore e hard reset all'origine .

    git stash --include-untracked
    git fetch --all
    git clean -fdx
    git reset --hard origin/master
    



Related