git selective odwraca lokalne zmiany z pliku
W moim Git repo, który śledzi repo svn, dokonałem kilku zmian w jednym pliku.
Teraz chcę przywrócić te zmiany (jak svn revert), ale tylko fragmenty pliku.
Chcę mieć możliwość przeglądania różnic w pliku, odrzucania (przywracania) zmian, których nie chcę i zachowywania zmian, których chcę.
The
git add -i
Command wydaje się mieć taką możliwość, ale nie chcę tego jeszcze wystawiać.
6 answers
Możesz to zrobić bezpośrednio za pomocą git checkout -p
. Zobacz odpowiedź Daniela Stutzbacha poniżej.
stara odpowiedź (przed checkout -p
została wprowadzona):
Możesz to zrobić tak:
git add -i
(wybierz te, które chcesz zachować)
git commit -m "tmp"
Teraz masz commit z tylko zmianami, które chcesz zachować, a reszta jest nieaktywna.
git reset --hard HEAD
W tym momencie niezatwierdzone zmiany zostały odrzucone, więc masz czysty katalog roboczy, ze zmianami chcę pozostać zaangażowana na szczycie.
git reset --mixed HEAD^
Usuwa to ostatni commit ('tmp'), ale zachowuje modyfikacje w katalogu roboczym, bez zmian.
EDIT: zamieniono --soft
na --mixed
, aby oczyścić miejsce postoju.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:50
Wierzę, że można to zrobić najprościej:
git checkout -p <optional filename(s)>
Ze strony Man:
−p, −−patch Interactively select hunks in the difference between the <tree−ish> (or the index, if unspecified) and the working tree. The chosen hunks are then applied in reverse to the working tree (and if a <tree−ish> was specified, the index).
This means that you can use git checkout −p to selectively discard
edits from your current working tree.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-04 22:55:57
Możesz uruchomić git diff
na pliku, zapisać wynikowy diff, edytować go, aby usunąć zmiany, które chcesz zapisać, a następnie uruchomić go przez patch -R
, aby cofnąć Pozostałe diffy.
git diff file.txt >patch.tmp # edit patch.tmp to remove the hunks you want to keep patch -R <patch.tmp
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-10 11:44:36
Wygląda na to, że chcesz
git revert --no-commit $REVSISON
Możesz użyć
git diff --cached
Aby zobaczyć, jakie zmiany zostaną wprowadzone przed zatwierdzeniem ( ponieważ cofanie jest tylko zatwierdzeniem w kierunku do przodu, które replikuje odwrotność zmiany w przeszłości )
Jeśli korzystałeś z czystego repozytorium Git, możesz, w zależności od swoich celów, użyć interaktywnej rebase (git rebase -i
), aby wrócić do zmian, które Ci się nie spodobały i edytować je z mocą wsteczną, tak aby zmiany, które Ci się nie podobają, nigdy się nie wydarzyły, ale to zazwyczaj tylko dla Jeśli wiesz nie będziesz chciał tego więcej zobaczyć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-11 09:33:11
Ponowne czytanie pytania brzmi tak, jakbyś chciał cofnąć zmiany, które są w twoim drzewie roboczym, a nie zmiany, które zostały wcześniej popełnione, ale niektóre inne odpowiedzi sprawiają, że brzmi to tak, jakby moje czytanie mogło być błędne. Możesz to wyjaśnić?
Jeśli zmiany są tylko w Twojej kopii roboczej, najprostszym sposobem na to jest ustawienie zmian, które chcesz zachować:
git add -i <file>
Następnie odrzuć zmiany, których nie chcesz zachować, sprawdzając indeks wersja:
git checkout -- <file>
Następnie wycofaj zmiany, jeśli nie chcesz ich jeszcze wystawić:
git reset -- <file>
Ten przepis przywraca tylko wybrane zmiany do pliku (lub plików, które podałeś) i nie tworzy żadnych tymczasowych zmian, które wymagają przywrócenia.
Jeśli chcesz selektywnie zastosować tylko niektóre zmiany wprowadzone w poprzednich zatwierdzeniach, możesz najpierw zresetować plik do poprzedniego stanu zatwierdzonego:
git reset <commit_before_first_unwanted_change> -- <file>
Następnie możesz zastosować poprzedni przepis git add -i <file>
, Aby ustawić te zmiany, które chcesz zachować, git checkout -- <file>
aby wyrzucić niechciane zmiany i git reset -- <file>
aby "usunąć" zmiany.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-10 15:43:47
Opcje wiersza poleceń opisane w odpowiedziach są przydatne, gdy plik znajduje się na serwerze, do którego uzyskuję dostęp przez terminal ssh. Jednak, gdy plik jest na mojej lokalnej maszynie, preferuję następujący sposób:
Otwórz plik w edytorze netbeans (który jest wyposażony w obsługę Gita). Netbeans umieszcza czerwone/zielone / niebieskie znaki na numerach linii, aby wskazać, gdzie rzeczy zostały usunięte/dodane/zmodyfikowane (odpowiednio).
Kliknięcie prawym przyciskiem myszy dowolnego z tych znaków daje możliwość cofnięcia tego zmiana. Ponadto możesz kliknąć prawym przyciskiem myszy na czerwone i niebieskie znaki, aby znaleźć starą wersję w wyskakującym okienku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-07 05:05:38