w przypadku pojedynczego pliku, zamiast żonglować poleceniami skrytki, o wiele łatwiejszym sposobem jest skopiowanie pojedynczego pliku i przywrócenie go z powrotem, aby po prostu skopiować oryginał. na przykład. cp just_my_file.txt just_my_file.txt.manualstash teraz możesz wykonać wszystkie operacje pobierania i inne rzeczy, a ponieważ kopia jest „nieśledzonym plikiem”, możesz bez problemu przemieszczać się między gałęziami i zatwierdzeniami. Kiedy jesteś na właściwej gałęzi / zatwierdzeniu, w którym chcesz "scalić pojedynczy plik", po prostu zrób, mv just_my_file.txt.manualstash just_my_file.txta teraz możesz przejrzeć zmiany i zatwierdzić je w razie potrzeby
Dimitry K
Odpowiedzi:
173
Myślę stash -p jest to prawdopodobnie wybór, którego chcesz, ale na wypadek, gdybyś w przyszłości napotkał inne jeszcze bardziej skomplikowane rzeczy, pamiętaj, że:
Stashjest po prostu bardzo prostą alternatywą dla tylko nieco bardziej złożonych branchzestawów. Skrytka jest bardzo przydatna do szybkiego przenoszenia rzeczy, ale możesz wykonywać bardziej złożone rzeczy z gałęziami bez większego bólu głowy i pracy.
idź i rób, co chcesz, a później po prostu rebasei / lub mergetmpbranch. To naprawdę nie jest tak dużo dodatkowej pracy, gdy musisz wykonać dokładniejsze śledzenie, niż pozwala na to skrytka.
Jeśli masz dużo plików, których nie chcesz przechowywać, zajmuje to dużo czasu.
jjj
23
Nie wiem, kiedy to się zmieniło, ale na dzień dzisiejszy git 2.14.1mogę określić nazwę plikugit stash -p <filename>
muon
21
Najlepszą opcją jest umieszczenie wszystkiego oprócz tego pliku i polecenie stashowi, aby zachował indeks git stash save --keep-index, w ten sposób ukrywając plik niestabilizowany:
Jak zauważa Dan, thefiletostashjest jedynym, który ma zostać zresetowany przez skrytkę, ale przechowuje również inne pliki, więc nie jest to dokładnie to, czego chcesz.
Chociaż powoduje to zachowanie indeksu w tym samym stanie, czy nie powoduje to również ukrycia plików znajdujących się w indeksie? Innymi słowy, jeśli po wykonaniu tej czynności zatwierdzisz indeks do bieżącej gałęzi, a następnie przełączysz się na inną gałąź i zrobisz git stash popto, czy nie spowoduje to zastosowania wszystkich plików, a nie tylko jednego pliku, który chcieliśmy przechować?
Dan Molding,
@DanMoulding: masz całkowitą rację, nie myślałem o tym.
CharlesB,
16
Na wypadek, gdybyś naprawdę miał na myśli „odrzucaj zmiany” za każdym razem, gdy używasz „git stash” (i tak naprawdę nie używaj git stash do tymczasowego przechowywania), w takim przypadku możesz użyć
git checkout -- <file>
Pamiętaj, że git stash to po prostu szybsza i prostsza alternatywa dla rozgałęziania i robienia rzeczy.
Myślę, że to najlepsza odpowiedź, jeśli chcesz usunąć wszystkie zmodyfikowane zmiany w jednym pliku.
Mohamed Haseel
i chciałbym, żeby to była najlepsza odpowiedź na to szczególne zadanie
Zakir hussain
6
Pytanie było wystarczająco jasne i nie pytało, jak przywrócić zmiany w jednym pliku. Głosowano w dół.
Richard Smith
To dobra odpowiedź, z wyraźną alternatywą. Ale niektórzy ludzie będą na tyle uparci, aby użyć głosu przeciwnego jako nadużycia: +1
Mukul Jain
@MukulJain Właściwie potrzebowałem użyć skrytki na plik w bardzo tymczasowy sposób (w zasadzie oddzielając niektóre zmiany w dwóch zatwierdzeniach, które dotyczyły tych samych wierszy, dla jednego pliku). Nie będę głosować przeciw, po prostu stwierdzę, że jest to dla mnie bezużyteczne.
cp just_my_file.txt just_my_file.txt.manualstash
teraz możesz wykonać wszystkie operacje pobierania i inne rzeczy, a ponieważ kopia jest „nieśledzonym plikiem”, możesz bez problemu przemieszczać się między gałęziami i zatwierdzeniami. Kiedy jesteś na właściwej gałęzi / zatwierdzeniu, w którym chcesz "scalić pojedynczy plik", po prostu zrób,mv just_my_file.txt.manualstash just_my_file.txt
a teraz możesz przejrzeć zmiany i zatwierdzić je w razie potrzebyOdpowiedzi:
Myślę
stash -p
jest to prawdopodobnie wybór, którego chcesz, ale na wypadek, gdybyś w przyszłości napotkał inne jeszcze bardziej skomplikowane rzeczy, pamiętaj, że:Stash
jest po prostu bardzo prostą alternatywą dla tylko nieco bardziej złożonychbranch
zestawów. Skrytka jest bardzo przydatna do szybkiego przenoszenia rzeczy, ale możesz wykonywać bardziej złożone rzeczy z gałęziami bez większego bólu głowy i pracy.idź i rób, co chcesz, a później po prostu
rebase
i / lubmerge
tmpbranch. To naprawdę nie jest tak dużo dodatkowej pracy, gdy musisz wykonać dokładniejsze śledzenie, niż pozwala na to skrytka.źródło
Jeśli nie chcesz określać wiadomości ze swoimi ukrytymi zmianami, podaj nazwę pliku po podwójnym myślniku.
Jeśli jest to nieśledzony / nowy plik, musisz go najpierw przygotować.
Jednakże, jeśli nie chcesz, aby określić wiadomość, używania
push
.Obie metody działają w wersjach git 2.13+
źródło
git stash -- filename.ext
,git commit --amend
,git stash pop
Możesz interaktywnie ukrywać pojedyncze linie za pomocą
git stash -p
(analogicznie dogit add -p
).Nie wymaga nazwy pliku, ale możesz po prostu pomijać inne pliki, ddopóki nie dotrzesz do pliku, który chcesz schować, a skrytka zmieni się tam a.
źródło
git 2.14.1
mogę określić nazwę plikugit stash -p <filename>
Najlepszą opcją jest umieszczenie wszystkiego oprócz tego pliku i polecenie stashowi, aby zachował indeks
git stash save --keep-index
, w ten sposób ukrywając plik niestabilizowany:Jak zauważa Dan,
thefiletostash
jest jedynym, który ma zostać zresetowany przez skrytkę, ale przechowuje również inne pliki, więc nie jest to dokładnie to, czego chcesz.źródło
git stash pop
to, czy nie spowoduje to zastosowania wszystkich plików, a nie tylko jednego pliku, który chcieliśmy przechować?Na wypadek, gdybyś naprawdę miał na myśli „odrzucaj zmiany” za każdym razem, gdy używasz „git stash” (i tak naprawdę nie używaj git stash do tymczasowego przechowywania), w takim przypadku możesz użyć
Pamiętaj, że git stash to po prostu szybsza i prostsza alternatywa dla rozgałęziania i robienia rzeczy.
źródło