Czy istnieje możliwość przywrócenia zatwierdzonego pliku w Git? Po wysłaniu zatwierdzenia do GitHub zdałem sobie sprawę, że jest plik, którego nie chciałem wypchnąć (nie dokończyłem zmian).
sprawdź poprzedni (niezmieniony) stan twojego pliku; zwróć uwagę na podwójną kreskę
git checkout HEAD^ -- /path/to/file
popełnij to:
git commit -am "revert changes on this file, not finished with it yet"
popchnij, bez użycia siły:
git push
wróć do swojej niedokończonej pracy, ponownie wykonaj (3 razy strzałka w górę):
git checkout HEAD^ -- /path/to/file
skutecznie „niezobowiązujący”:
Aby zmodyfikować ostatnie zatwierdzenie repozytorium HEAD, zaciemniając przypadkowo wypchniętą pracę, jednocześnie potencjalnie wpadając w konflikt z kolegą, który mógł już to zrobić, i który zapuści siwe włosy i straci dużo czasu, próbując pogodzić głowę lokalnego oddziału z centralnym:
Aby usunąć zmianę pliku z ostatniego zatwierdzenia:
aby przywrócić plik do stanu sprzed ostatniego zatwierdzenia, wykonaj:
git checkout HEAD^ /path/to/file
aby zaktualizować ostatnie zatwierdzenie z przywróconym plikiem, wykonaj:
git commit --amend
aby przekazać zaktualizowane zatwierdzenie do repozytorium, wykonaj:
git push -f
Naprawdę rozważ użycie preferowanej metody wspomnianej wcześniej.
Jeśli nie jesteś jedynym programistą w projekcie, naprawdę nie powinieneś używać git push -f. Stwarza o wiele więcej problemów, niż jest to warte. Po prostu usuń plik, a następnie wykonaj nowe zatwierdzenie.
richardm
1
@ user553086 nie może się bardziej zgodzić. Lepiej teraz?
xor
Czy jest to wykonalne w przypadku zatwierdzeń w późniejszych czasach? Np. Czy mógłbym to zrobić z git checkout HEAD~2 /path/to/file? Edycja: Wygląda na to, że chciałem w moim przypadku po prostugit rm /path/to/file
starscream_disco_party
1
Właśnie uratowałeś mi 4 godziny brachu!
Tosin Onikute
57
Jeśli chcesz usunąć plik ze zdalnego repozytorium, najpierw usuń go z projektu opcją --cache, a następnie wypchnij:
(Działa to nawet jeśli plik został dodany do zdalnego repozytorium kilka zatwierdzeń temu). Pamiętaj, aby dodać do .gitignore rozszerzenia plików, których nie chcesz przesyłać.
Zresetuj plik do poprawnego stanu, zatwierdź i ponownie wypchnij.
Jeśli jesteś pewien, że nikt inny nie pobrał jeszcze twoich zmian, możesz użyć --amendpodczas zatwierdzania, aby zmodyfikować poprzednie zatwierdzenie (tj. Przepisać historię), a następnie wypchnąć. Myślę, że będziesz musiał użyć tej -fopcji podczas pchania, aby wymusić pchnięcie.
Odpowiedzi:
aktualizacja: dodano bezpieczniejszą metodę
preferowana metoda:
sprawdź poprzedni (niezmieniony) stan twojego pliku; zwróć uwagę na podwójną kreskę
popełnij to:
popchnij, bez użycia siły:
wróć do swojej niedokończonej pracy, ponownie wykonaj (3 razy strzałka w górę):
skutecznie „niezobowiązujący”:
Aby zmodyfikować ostatnie zatwierdzenie repozytorium HEAD, zaciemniając przypadkowo wypchniętą pracę, jednocześnie potencjalnie wpadając w konflikt z kolegą, który mógł już to zrobić, i który zapuści siwe włosy i straci dużo czasu, próbując pogodzić głowę lokalnego oddziału z centralnym:
Aby usunąć zmianę pliku z ostatniego zatwierdzenia:
aby przywrócić plik do stanu sprzed ostatniego zatwierdzenia, wykonaj:
aby zaktualizować ostatnie zatwierdzenie z przywróconym plikiem, wykonaj:
aby przekazać zaktualizowane zatwierdzenie do repozytorium, wykonaj:
Naprawdę rozważ użycie preferowanej metody wspomnianej wcześniej.
źródło
git checkout HEAD~2 /path/to/file
? Edycja: Wygląda na to, że chciałem w moim przypadku po prostugit rm /path/to/file
Jeśli chcesz usunąć plik ze zdalnego repozytorium, najpierw usuń go z projektu opcją --cache, a następnie wypchnij:
(Działa to nawet jeśli plik został dodany do zdalnego repozytorium kilka zatwierdzeń temu). Pamiętaj, aby dodać do .gitignore rozszerzenia plików, których nie chcesz przesyłać.
źródło
Możesz przywrócić tylko jeden plik do określonej wersji.
Najpierw możesz sprawdzić, w których zatwierdzeniach plik został zmieniony.
git log path/to/file.txt
Następnie możesz pobrać plik z numerem wersji.
git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt
Następnie możesz zatwierdzić i wcisnąć ponownie.
źródło
Zresetuj plik do poprawnego stanu, zatwierdź i ponownie wypchnij.
Jeśli jesteś pewien, że nikt inny nie pobrał jeszcze twoich zmian, możesz użyć
--amend
podczas zatwierdzania, aby zmodyfikować poprzednie zatwierdzenie (tj. Przepisać historię), a następnie wypchnąć. Myślę, że będziesz musiał użyć tej-f
opcji podczas pchania, aby wymusić pchnięcie.źródło
Pobierz kod skrótu ostatniego zatwierdzenia.
git log
git revert <hash_code_from_git_log>
git push
sprawdź w GHR. możesz dostać wszystko, czego potrzebujesz, mam nadzieję, że to się przyda
źródło