Czy jest jakiś sposób na zrobienie pliku git pull
, który ignoruje wszelkie lokalne zmiany w plikach bez zdmuchiwania katalogu i konieczności wykonania git clone
?Git Pull ignorując lokalne zmiany?
Odpowiedz
Jeśli masz na myśli chcesz przyciąganie nadpisać lokalne zmiany, robi scalanie jakby drzewo pracy były czyste, dobrze oczyścić drzewo robocza:
git reset --hard
git pull
Jeśli istnieją Nieśledzone pliki lokalne można użyć git clean
, aby je usunąć. Użyj pliku git clean -f
, aby usunąć niepotwierdzone pliki, -df
, aby usunąć niepotwierdzone pliki i katalogi, oraz -xdf
, aby usunąć niepotwierdzone lub zignorowane pliki lub katalogi.
Jeśli z drugiej strony chcesz zachować lokalne modyfikacje w jakiś sposób byłoby użyć zapas, aby ukryć je przed ciągnięcie, następnie ponownie je potem:
git stash
git pull
git stash pop
Nie sądzę, to sprawia, że każdy W sensie dosłownym: Ignoruj jednak zmiany - połowa przeciągania jest scalana i musi scalić zatwierdzone wersje zawartości z wersjami, które pobrały.
Jeśli po "git reset" twoje pliki nadal różnią się od pilota, przeczytaj http://stackoverflow.com/questions/1257592/removing-files-saying-old-mode-100755-new-mode-100644-z-starto-- zmiany w –
Git to najdziwniejsza rzecz w historii. Reset Git - trudno zrobić. Następnie status git: Twój oddział wyprzedza dwa razy. – shailenTJ
@shailenTJ "Zmiany lokalne" oznaczają tutaj niezatwierdzone zmiany, a nie lokalne zatwierdzenia. 'git reset --hard' wpływa na pierwszy, nie drugi. Jeśli chcesz w pełni zresetować do stanu zdalnego, 'git reset --hard origin/
Spójrz na numer , aby umieścić wszystkie zmiany lokalne w "pliku ukrytym" i przywrócić ostatnie zatwierdzenie. W tym momencie możesz zastosować zmiany ukryte lub je odrzucić.
Jeśli jesteś na Linuksie:
git fetch
for file in `git diff origin/master..HEAD --name-only`; do rm -f "$file"; done
git pull
Pętla for usunie wszystkie pliki, które są śledzone zmienione w lokalnym repo, więc git pull
będzie działać bez żadnych problemów.
Najprzyjemniejszą rzeczą jest to, że tylko śledzone pliki zostaną nadpisane przez pliki w repozytorium, wszystkie inne pliki pozostaną nietknięte.
Myślę, że chodziło Ci o "śledzone pliki", co jest dokładnie tym, czego potrzebuję, dziękuję. – Ali
Polecenie poniżej nie będzie działać zawsze. Jeśli tak właśnie:
$ 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.
i tak dalej ...
Aby naprawdę zacząć od nowa, pobierając thebranch i nadpisanie wszystkich zmian, po prostu zrobić:
$ git checkout thebranch
$ git reset --hard origin/thebranch
To zadziała dobrze.
$ 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'
TAK. Tego właśnie potrzebowałem, by uzyskać ostateczne podejście "nie podawaj F o tym, co lokalne". Dzięki. :) – Adambean
Dla mnie następujące pracował:
(1) Pierwszy pobrać wszystkie zmiany:
$ git fetch --all
(2) Następnie zresetować Master:
$ git reset --hard origin/master
(3) Pull/update:
$ git pull
ten pobierze aktualną gałąź i próbować zrobić szybko naprzód do opanowania:
git fetch && git merge --ff-only origin/master
git fetch --all && git reset --hard origin/master
Przez „ignoruje” masz na myśli „nadpisaniu”? – Cascabel