W moim repozytorium git, które śledzi repozytorium svn, dokonałem wielu zmian w jednym pliku.
Teraz chcę cofnąć te zmiany (jak przywracanie svn), ale tylko części pliku.
Chcę mieć możliwość przeglądania różnic w pliku, odrzucania (cofania) zmian, których nie chcę i zachować zmiany, których chcę.
the
git add -i
Wydaje się, że polecenie ma opcję zrobienia tego, ale nie chcę jeszcze tego robić.
źródło
Uważam, że najprościej można to zrobić za pomocą:
Ze strony podręcznika:
źródło
a
opcji w trybie łatki do odrzucenia całego pliku, alegit checkout -- <file>
działa zgodnie z oczekiwaniami. Czy ktoś wie, dlaczego?Możesz uruchomić
git diff
plik, zapisać wynikowy różnicę, edytować go, aby usunąć zmiany, które chcesz zapisać, a następnie uruchomić go,patch -R
aby cofnąć pozostałe różnice.źródło
git diff
pokazuje cały plik jako zmieniony. Zwykle dzieje się tak, gdy plik został zapisany z różnymi zakończeniami linii niż poprzednio. Spowodowałoby to równieżpatch
odrzucenie pliku poprawki. Czy to brzmi jak to, co mogło się stać?Wygląda na to, że chcesz
Następnie możesz użyć
aby zobaczyć, jaka zmiana zostanie wprowadzona przed zatwierdzeniem (ponieważ cofanie jest po prostu zatwierdzeniem w kierunku do przodu, które replikuje odwrotność zmiany w przeszłości)
Jeśli korzystasz z czystego repozytorium Git, możesz ewentualnie, w zależności od swoich celów, użyć interaktywnej rebase (
git rebase -i
), aby wrócić do zatwierdzenia, którego nie lubiłeś i edytować zatwierdzenie wstecz, aby zmiany, których nie lubisz, nigdy nie miały miejsca , ale to generalnie tylko wtedy, gdy WIESZ, że już nigdy nie będziesz chciał tego oglądać.źródło
Czytając ponownie pytanie, wygląda na to, że chcesz cofnąć zmiany, które są w twoim drzewie roboczym, a nie zmiany, które zostały wcześniej wprowadzone, ale niektóre inne odpowiedzi sprawiają, że brzmi to tak, jakby moje czytanie mogło być błędne. Możesz wyjaśnić?
Jeśli zmiany znajdują się tylko w kopii roboczej, najłatwiejszym sposobem na to jest przygotowanie zmian, które chcesz zachować:
Następnie wyrzuć zmiany, których nie chcesz zachować, sprawdzając wersję indeksu:
Następnie wycofaj zmiany, jeśli nie chcesz ich jeszcze wystawiać:
Ta reguła przywraca tylko wybrane zmiany w pliku (lub plikach, które określisz) i nie tworzy żadnego tymczasowego zatwierdzenia, które następnie wymaga cofnięcia.
Jeśli chcesz selektywnie zastosować tylko niektóre zmiany dokonane w poprzednich zatwierdzeniach, możesz najpierw zresetować plik do poprzedniego stanu zatwierdzonego:
Następnie możesz postępować zgodnie z poprzednim przepisem,
git add -i <file>
aby wprowadzić zmiany, które chcesz zachować,git checkout -- <file>
wyrzucić niechciane zmiany igit reset -- <file>
„cofnąć” zmiany.źródło
Opcje wiersza poleceń opisane w odpowiedziach tutaj są przydatne, gdy plik znajduje się na serwerze, do którego mam dostęp przez terminal ssh. Jednak gdy plik znajduje się na moim komputerze lokalnym, wolę następujący sposób:
Otwórz plik w edytorze netbeans (który jest wyposażony w obsługę git). Netbeans umieszcza czerwone / zielone / niebieskie znaki na numerach wierszy, aby wskazać, gdzie elementy zostały usunięte / dodane / zmodyfikowane (odpowiednio).
Kliknięcie dowolnego z tych znaków prawym przyciskiem myszy daje możliwość cofnięcia tej zmiany. Ponadto możesz kliknąć prawym przyciskiem myszy czerwone i niebieskie znaki, aby zobaczyć starą wersję w wyskakującym okienku.
źródło