Obecnie mam trzy zmodyfikowane pliki w moim katalogu roboczym. Chcę jednak, aby jeden z nich został zresetowany do stanu HEAD.
W SVN użyłbym svn revert <filename>
(a następnie w svn update <filename>
razie potrzeby), ale w Git powinienem użyć git reset --hard
. To polecenie nie może jednak działać na jednym pliku.
Czy jest jakiś sposób w Git, aby odrzucić zmiany w jednym pliku i zastąpić go świeżą kopią HEAD?
git checkout
poniżej jest odpowiedź. W git „cofnij” to coś, co robisz w celu zatwierdzenia. „Cofnij” powoduje powtórzenie odwrotności historycznego zatwierdzenia w twoim katalogu roboczym, dzięki czemu możesz dokonać nowego zatwierdzenia, które „cofnie” cofnięte zatwierdzenie. Uważam, że jest to częste zamieszanie dla osób przychodzących do git z svn.Odpowiedzi:
Możesz użyć następującego polecenia:
... który zaktualizuje zarówno kopię roboczą, jak
my-file.txt
i jej stan w indeksie, o tej z HEAD.--
w zasadzie oznacza: traktuj każdy argument po tym punkcie jako nazwę pliku . Więcej szczegółów w tej odpowiedzi . Dzięki VonC za zwrócenie na to uwagi.źródło
HEAD~1
aby wskazać przedostatnie zatwierdzenie.HEAD
jeśli jesteś na czele obecnego oddziału - patrz norbauer.com/rails-consulting/notes/…reset
polecenie (jak to mówi) „nie można wykonać twardego resetu ze ścieżkami”, a następnie dlaczego tocheckout
polecenie nie jest (nie może być) użyte do twardego resetu całego zestawu? (Mam na myśli, dlaczego tak zostało zaprojektowane).git checkout
: „Zastąp ścieżki w drzewie roboczym, zastępując je zawartością w indeksie lub w <tree-ish>”. To<tree-ish>
znaczy, jeśli zostanie pominięty, dowolna zawartość indeksu zostanie użyta do aktualizacji drzewa roboczego. To może, ale nie musi różnić się od HEAD.Zresetuj do głowy:
Aby na stałe zresetować pojedynczy plik do HEAD:
Zauważ, że
@
to skrótHEAD
. Starsza wersja git może nie obsługiwać krótkiej formy.Resetuj do indeksu:
Aby na stałe zresetować pojedynczy plik do indeksu , zakładając, że indeks nie jest pusty, w przeciwnym razie HEAD:
Chodzi o to, że aby być bezpiecznym, nie chcesz pomijać
@
aniHEAD
wykonywać polecenia, chyba że specjalnie chcesz zresetować tylko do indeksu .źródło
man bash
strona Wspomniany również w tej odpowiedzi: unix.stackexchange.com/a/187548/142855--
służy do informowania programuI've finished specifying "options", and from here on, everything will be a positional argument.
. Tradycyjnie „opcje” to tokeny,--recursive
które mogą pojawiać się w dowolnej kolejności, a nawet być łączone razem w krótkiej formie, nprm -rf
. Z. Przeciwnie, „argumenty pozycyjne” są bardziej podobne do argumentów przekazywanych do funkcji w języku programowania: ich pozycja na liście tokenów określa, co dokładnie program ma zamiar z nimi zrobić (często są to nazwy plików).--
usuwa niejasności co do tego, który jest który.Aby powrócić do upstream / master:
źródło
Od wersji Git 2.23 (sierpień 2019 r.) Możesz używać
restore
( więcej informacji ):Powyższy przywróci
MyFile
naHEAD
(ostatni commit) na bieżącej gałęzi.Jeśli chcesz uzyskać zmiany z innych zmian, możesz cofnąć się do historii zmian. Poniższe polecenie otrzyma
MyFile
dwa zatwierdzenia poprzedzające ostatnie. Potrzebujesz teraz opcji-s
(--source
), ponieważ teraz używasz,master~2
a niemaster
(domyślnie) podczas przywracania źródła:Możesz także pobrać plik z innego oddziału!
źródło
Odniesienie do HEAD nie jest konieczne.
git checkout -- file.js
jest wystarczającyźródło
możesz użyć poniższego polecenia do zresetowania pojedynczego pliku
Wyświetl wszystkie zmienione pliki, które chcesz uzyskać za
path_to_file/filename
pomocą poniższego poleceniaźródło
Możesz użyć następującego polecenia:
git reset -- my-file.txt
która zaktualizuje zarówno kopię roboczą
my-file.txt
po dodaniu.źródło
Możesz użyć następującego polecenia:
Jeśli masz oddział o tej samej nazwie, musisz użyć tego polecenia:
źródło
Prosty, łatwy i praktyczny sposób na wyciągnięcie ciepłej wody, szczególnie jeśli nie czujesz się tak komfortowo z git:
Wyświetl dziennik swojego pliku
git log myFile.js
popełnić 1023057173029091u23f01w276931f7f42595f84f Autor: kmiklas Data: Wt 7 sierpnia 09:29:34 2018 -0400
JIRA-12345 - Refaktoryzacja z nową architekturą.
Uwaga skrót pliku:
1023057173029091u23f01w276931f7f42595f84f
Pokaż plik za pomocą skrótu. Upewnij się, że tego chcesz:
git show 1023057173029091u23f01w276931f7f42595f84f: ./ myFile.js
Przekieruj plik do lokalnej kopii
git show 1023057173029091u23f01w276931f7f42595f84f: ./ myFile.js> myFile.07aug2018.js
Utwórz kopię zapasową bieżącego pliku.
cp myFile.js myFile.bak.js
Otwórz oba pliki w swoim ulubionym edytorze tekstu.
vim myFile.js
vim myFile.07aug2018.js
Skopiuj i wklej kod z myFile.07aug2018.js do myFile.js i zapisz.
Zatwierdź i wypisz plik myFile.js
Ponownie przejrzyj dziennik i potwierdź, że plik jest poprawnie zainstalowany.
Powiedz swoim klientom, aby pobrali najnowszą wersję, z radością obserwuj, jak działa ze starą wersją.
Nie jest to najseksowniejsze ani najbardziej skoncentrowane na gitach rozwiązanie i zdecydowanie „ręczne” resetowanie / przywracanie, ale działa. Wymaga minimalnej znajomości git i nie zaburza historii zmian.
źródło