C'è un modo per fare un git pullche 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 pullche 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 cleanper rimuoverli. Utilizzare git clean -fper rimuovere file non tracciati, -dfper rimuovere file e directory non -xdftracciati 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 resettuoi file sono ancora diversi dal telecomando, leggi stackoverflow.com/questions/1257592/…
git reset --hardcolpisce 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 recloneo git sync), né svn fornisce tale comando (come svn recheckouto svn sync).
Prova il seguente comando:
git reset --hard origin/master
git clean -fxd
git pull
git clean -fxdrimuove 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 pullfunzionerà 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