git sostituisce la versione locale con la versione remota


148

Come posso dire a git di ignorare il mio file locale e prendere quello dal mio ramo remoto senza cercare di unire e causare conflitti?


1
Vedere la risposta SO " comando git per creare un ramo come un altro " per tutti gli attuali modi possibili di simulazionegit merge -s their .
VonC,

Sarebbe utile se potessi fornire qualche dettaglio in più. Vuoi adottare il contenuto di tutti i file dalla diramazione remota o solo alcuni dei file (ovvero mantenere alcune versioni / modifiche locali)? Hai qualche storia locale che vuoi conservare? (Questo potrebbe essere importante se ci sono altri rami o repository che hanno già incorporato la tua cronologia locale.) Se vuoi conservare la tua cronologia locale, cosa pensi di fare in seguito? (Potresti lasciare un tag che punta alla cronologia locale e reimpostare il tuo ramo su ciò che ha il telecomando, oppure potresti voler unire i loro).
Chris Johnsen,

Risposte:


169

Questa è la soluzione più sicura:

git stash

Ora puoi fare quello che vuoi senza paura dei conflitti.

Per esempio:

git checkout origin/master

Se si desidera includere le modifiche remote nel ramo principale, è possibile effettuare:

git reset --hard origin/master

Questo ti farà ramificare "master" per puntare a "origin / master".


90
Potrebbe valere la pena sottolineare che questo distaccherà HEAD - l'interrogante potrebbe preferire rimanere sul ramo congit stash; git fetch origin; git reset --hard origin/master
Mark Longair

10
Penso che il commento di Mark Longair sia la vera risposta a questa domanda

è stata la risposta più utile per me +1
Andres

Come tornare allo stato prima del git stash? git stash listè vuoto.
Leo,

Voglio abbracciarti
Ugur Kazdal

45

Capisco la domanda in questo modo: vuoi sostituire completamente il contenuto di un file (o una selezione) dall'upstream. Non si desidera influire direttamente sull'indice (quindi passare attraverso Aggiungi + commit come al solito).

Semplicemente

git checkout remote/branch -- a/file b/another/file

Se si desidera eseguire questa operazione per sottotitoli estesi e si desidera invece influenzare direttamente l'indice, utilizzare

git read-tree remote/branch:subdir/

È quindi possibile (facoltativamente) aggiornare la propria copia di lavoro facendo

git checkout-index -u --force

2
Questo è esattamente quello che volevo. Grazie.
AutonomousApps,

11

La mia comprensione è che, ad esempio, hai erroneamente salvato un file che hai aggiornato solo a scopo di test. Quindi, quando esegui "git status" il file appare come "Modified" e dici delle parolacce. Volete solo indietro la vecchia versione e continuare a funzionare normalmente.

In quello scenario puoi semplicemente eseguire il seguente comando:

git checkout -- path/filename

10

Vorrei controllare il file remoto dal "master" (il repository remoto / di origine) in questo modo:

git checkout master <FileWithPath>

Esempio: componenti principali di checkout git / indexTest.html


Per me ha funzionato così "telecomandi git checkout / origin / master <my-file>"
saravanakumar

4

Utilizzare l' opzione -so --strategycombinata con l' -Xopzione. Nella domanda specifica, si desidera conservare tutti i file remoti e sostituire i file locali con lo stesso nome.

Sostituisci i conflitti con la versione remota

git merge -s recursive -Xtheirs upstream/master  

utilizzerà la versione del repository remoto di tutti i file in conflitto.

Sostituisci i conflitti con la versione locale

git merge -s recursive -Xours upstream/master

utilizzerà la versione del repository locale di tutti i file in conflitto.

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.