C'è un modo per fare un git pull
che ignora eventuali modifiche ai file locali senza soffiare via la directory e dover eseguire un git clone
?
rm -rf local_repo && git clone remote_url
.
C'è un modo per fare un git pull
che ignora eventuali modifiche ai file locali senza soffiare via la directory e dover eseguire un git clone
?
rm -rf local_repo && git clone remote_url
.
Risposte:
Se vuoi dire che vuoi che il pull sovrascriva le modifiche locali, eseguendo l'unione come se l'albero di lavoro fosse pulito, beh, pulisci l'albero di lavoro:
git reset --hard
git pull
Se sono presenti file locali non tracciati, è possibile utilizzarli git clean
per rimuoverli. Utilizzare git clean -f
per rimuovere file non tracciati, -df
per rimuovere file e directory non -xdf
tracciati e per rimuovere file o directory non tracciati o ignorati.
Se d'altra parte vuoi mantenere le modifiche locali in qualche modo, useresti stash per nasconderle prima di tirare, quindi riapplicarle in seguito:
git stash
git pull
git stash pop
Non credo abbia alcun senso ignorare letteralmente i cambiamenti, tuttavia - metà del pull è unire e deve unire le versioni impegnate del contenuto con le versioni che ha recuperato.
git reset
tuoi file sono ancora diversi dal telecomando, leggi stackoverflow.com/questions/1257592/…
git reset --hard
colpisce il primo, non il secondo. Se vuoi reimpostare completamente lo stato del telecomando, git reset --hard origin/<branch>
ma spesso e in questo caso, quei due impegni che stai precedendo sono il lavoro che hai fatto, non qualcosa che vuoi buttare via.
Per me ha funzionato:
(1) Per prima cosa recupera tutte le modifiche:
$ git fetch --all
(2) Quindi ripristinare il master:
$ git reset --hard origin/master
(3) Pull / aggiornamento:
$ git pull
Vuoi solo un comando che dia esattamente lo stesso risultato di rm -rf local_repo && git clone remote_url
, giusto? Voglio anche questa funzione. Mi chiedo perché git non fornisca un tale comando (come git reclone
o git sync
), né svn fornisce tale comando (come svn recheckout
o svn sync
).
Prova il seguente comando:
git reset --hard origin/master
git clean -fxd
git pull
git clean -fxd
rimuove anche i file .gitignore
.
Il comando sotto non funzionerà sempre . Se fai solo:
$ 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.
e così via...
Per ricominciare davvero , scaricando thebranch e sovrascrivendo tutte le modifiche locali, fai semplicemente:
$ git checkout thebranch
$ git reset --hard origin/thebranch
Funzionerà bene.
$ 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'
Guarda git stash per inserire tutte le modifiche locali in un "file stash" e ripristinare l'ultimo commit. A quel punto, puoi applicare le modifiche nascoste o scartarle.
Se sei su Linux:
git fetch
for file in `git diff origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull
Il ciclo for eliminerà tutti i file tracciati che vengono modificati nel repository locale, quindi git pull
funzionerà senza problemi.
La cosa più bella di questo è che solo i file tracciati verranno sovrascritti dai file nel repository, tutti gli altri file rimarranno intatti.
questo ha funzionato per me
git fetch --all
git reset --hard origin/master
git pull origin master
con la risposta accettata ottengo errori di conflitto
Di solito faccio:
git checkout .
git pull
Nella cartella principale del progetto.
.gitignore
"L'aggiunta di file indesiderati a .gitignore funziona fintanto che inizialmente non li hai impegnati in alcun ramo."
Inoltre puoi eseguire:
git update-index --assume-unchanged filename
https://chamindac.blogspot.com/2017/07/ignoring-visual-studio-2017-created.html