Czy jest jakiś sposób na przywrócenie lub cofnięcie git pull, aby moje źródła / repozytoria powróciły do starego stanu, który był przed wykonaniem git pull? Chcę to zrobić, ponieważ połączył niektóre pliki, których nie chciałem, ale scalam tylko pozostałe pliki. Chcę odzyskać te pliki, czy to możliwe?
EDYCJA: Chcę cofnąć połączenie w celu wyjaśnienia. Po obejrzeniu kilku odpowiedzi zrobiłem to
git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...
Co mam teraz zrobić? Czy wszystko git reset --hard
jest w porządku? Nie chcę tego ponownie pieprzyć, więc pytasz o szczegółowe kroki?
git
version-control
git-merge
seg.server.fault
źródło
źródło
git reset --hard 01b34fa
w tym przypadku mogłeś zrobić,git reset --hard HEAD^
który resetuje się do jednego zatwierdzenia przed HEAD.git reflog
pokaże wszystko, co zostało zrobione z git. Istnieje obawa, żegit reset --hard [sha1 of something from reflog]
cofnie wszystko, co jest pokazanereflog
, co czasami nie jest celem, np. chcesz cofnąć scalanie na gałęzi master pobranej z pochodzenia ze złymi danymi (zdarza się), a po tym scaleniu pracowałeś nad innymi gałęziami.reflog
pokaże każdą szansę na innych gałęziach. Alegit checkout master
igit reset --hard [SH1 of commit on master branch just before merge]
zresetuje tylko bieżącą gałąź master usuwając scalenie z miejsca pochodzenia.Odpowiedzi:
Uruchomienie
git pull
wykonuje następujące zadania w kolejności:git fetch
git merge
Krok scalania łączy gałęzie, które zostały skonfigurowane do scalenia w konfiguracji. Chcesz cofnąć krok scalania , ale prawdopodobnie nie pobieranie (nie ma większego sensu i nie powinno być konieczne).
Aby cofnąć scalenie , użyj,
git reset --hard
aby zresetować lokalne repozytorium do poprzedniego stanu; użyj git-reflog, aby znaleźć SHA-1 poprzedniego stanu, a następnie zresetuj go.Ostrzeżenie
Polecenia wymienione w tej sekcji usuwają wszystkie niezatwierdzone zmiany, potencjalnie prowadząc do utraty pracy:
Możesz też zresetować do określonego momentu w czasie, takiego jak:
źródło
master@{1}
, co jest poprzednia pozycjamaster
,master@{"5 minutes ago"}
lubmaster@{14:30}
. Szczegółowe informacje na temat określania wersji w ten sposób można znaleźć wman git-rev-parse
sekcji o nazwie „określanie wersji”.Updating d2c90a3..035ac4d
. Tutaj możesz również użyćd2c90a3
jako parametru do zresetowania.To samo co odpowiedź jkp, ale oto pełne polecenie:
gdzie a0d3fe6 zostanie znalezione przez wykonanie
i patrząc na punkt, w którym chcesz cofnąć.
źródło
git reset HEAD --hard
na przykład nie mogę tego zrobić ?git reset --hard HEAD@{n}
pracowałgit reflog
: dab04ec HEAD @ {0}, aaaaaaa HEAD @ {1} i bbbbbbb HEAD @ {2}. Jeśli to zrobięgit reset --hard bbbbbbb
, stracę HEAD 0 i 1?Bardziej nowoczesnym sposobem cofnięcia scalenia jest:
I nieco starszy sposób:
Oldschoolowy sposób opisany w poprzednich odpowiedziach (ostrzeżenie: odrzuci wszystkie lokalne zmiany):
Ale tak naprawdę warto zauważyć, że
git merge --abort
jest to odpowiednik tylkogit reset --merge
tego, coMERGE_HEAD
jest obecne. Można to odczytać w pomocy git dla polecenia scalania.Po nieudanym scaleniu, gdy nie ma
MERGE_HEAD
, nieudanego scalenia można cofnąć,git reset --merge
ale niekoniecznie za pomocągit merge --abort
, więc są one nie tylko starą i nową składnią tego samego . Dlatego uważam, że jestemgit reset --merge
o wiele bardziej przydatny w codziennej pracy.źródło
git merge --abort
działa W TRAKCIE scalania, a nie pogit pull
zakończeniu. Ta odpowiedź wydaje się więc nie mieć znaczenia dla pytania.git reset --merge
usuwa wszystkie zmiany, które nie zostały wprowadzone do zatwierdzenia. Odkryłem to na własnej skórze.to działa po raz pierwszy:
git reflog
znajdź swój SHA swojego poprzedniego stanu i wykonaj (HEAD @ {1} jest przykładem)
źródło
Jeśli masz gitk (spróbuj uruchomić „gitk --all z linii poleceń git”), to proste. Po prostu uruchom go, wybierz zatwierdzenie, do którego chcesz przywrócić (kliknij prawym przyciskiem myszy), i wybierz „Zresetuj gałąź główną tutaj”. Jeśli nie masz żadnych nieprzewidzianych zmian, wybierz opcję „trudną”.
źródło
Załóżmy, że
$COMMIT
był to ostatni identyfikator zatwierdzenia przed wykonaniemgit pull
. To, czego potrzebujesz, aby cofnąć ostatnie ściągnięcie, togit reset --hard $COMMIT
.
Premia:
Mówiąc o pullu, chciałbym podzielić się ciekawą sztuczką,
git pull --rebase
To powyższe polecenie jest najbardziej użytecznym poleceniem w moim życiu git, które zaoszczędziło wiele czasu.
Przed wypchnięciem nowego zatwierdzenia na serwer, spróbuj tego polecenia, a ono automatycznie zsynchronizuje najnowsze zmiany na serwerze (z pobieraniem + scalaniem) i umieści twoje zatwierdzenie na górze w dzienniku git. Nie musisz martwić się o ręczne wyciąganie / scalanie.
Znajdź szczegóły na: http://gitolite.com/git-pull--rebase
źródło
Jest to najprostszy sposób na przywrócenie zmian.
Wykonaj kopię zapasową zmienionych plików, ponieważ spowoduje to usunięcie nowo utworzonych plików i folderów .
Gdzie
9573e3e0
jest Twój {Commit id}źródło
Updating ffce65bd..e929e884
, dogit reset --hard ffce65bd
możesz to zrobić
git reset --hard ORIG_HEAD
ponieważ „pull” lub „merge” ustaw ORIG_HEAD na bieżący stan przed wykonaniem tych akcji.
źródło
git pull wykonaj poniżej operacji.
Aby cofnąć wyciągnięcie, wykonaj dowolną operację:
Poprawa:
Następnym razem użyj
git pull --rebase
zamiastgit pull
... zmienić jego serwer synchronizacji, wykonując (pobierz i scal).źródło
Jeśli wystąpi nieudane scalenie, które jest najczęstszym powodem cofnięcia
git pull
, uruchamianiegit reset --merge
działa dokładnie tak, jak można się spodziewać: zachowaj pobrane pliki, ale cofnij scalanie, któregit pull
próbowało scalić. Następnie można zdecydować, co zrobić bez bałaganu, którygit merge
czasami generuje. I nie trzeba nikogo szukać dokładnego identyfikatora zatwierdzenia, który jest--hard
wymagany w każdej innej odpowiedzi.źródło