Często odkładam pracę na później, potem pojawiają się inne rzeczy, a kilka tygodni później chcę sprawdzić skrytkę i dowiedzieć się, jakie zmiany wprowadziłby, gdybym zastosował ją do działającego drzewa w jego obecnym stanie.
Wiem, że mogę zrobić różnicę git na skrytce, ale to pokazuje mi wszystkie różnice między działającym drzewem a skrytką, podczas gdy ja po prostu jestem zainteresowany, aby wiedzieć, co zastosuje skrytka się zmieni.
W jaki sposób mogę to zrobić?
git stash show -p stash@{1} >~/.diff && vim ~/.diff
(nie musi byćvim
. żadnym edytorem tekstu, o ile edytor tekstu obsługuje podświetlanie składni dladiff
danych wyjściowych).Odpowiedzi:
git stash show
pokaże Ci pliki, które zmieniły się w Twojej ostatniej skrytce. Możesz dodać-p
opcję pokazującą różnicę.Jeśli skrytka, którą jesteś zainteresowany, nie jest najnowsza, dodaj nazwę skrytki na końcu polecenia:
źródło
fatal: unable to create temp-file: Invalid argument
- jakiś pomysł, dlaczego?git stash show -p stash@{0}
aby zobaczyć konkretną skrytkę. 0 pokazuje ostatni dźwięk, 1 drugi ostatni… itd.git stash list
Pokaże wszystkie dostępne.git stash show -p 'stash@{0}'
)git stash show -p stash@{0}> stash.txt
Aby wyświetlić bieżącą listę skrytek:
Zobaczysz taką listę:
Aby wyświetlić diff na którymkolwiek z tych skrytek:
źródło
Jestem fanem
gitk
graficznego interfejsu użytkownika do wizualizacji repozytoriów git. Możesz zobaczyć ostatni przedmiot ukryty w:Możesz także użyć widoku dowolnej ze swoich ukrytych zmian (wymienionych przez
git stash list
). Na przykład:Na poniższym zrzucie ekranu możesz zobaczyć ukrytą skrzynkę jako zatwierdzenie w lewym górnym rogu, kiedy i skąd pochodzi ona w historii zatwierdzeń, listę plików zmodyfikowanych w prawym dolnym rogu i różnicę linia po linii w dolnej -lewo. Przez cały czas schowek jest schowany.
źródło
stash@{X}
wartości w wierszu poleceń, aby zobaczyć więcej wyników na raz, ale nie znalazłem prostego sposobu, aby po prostu powiedzieć „pokaż wszystkie wpisy skrytki” w gitk.gitk stash
wydaje się byćgitk stash@{0}
gitk `git stash list --pretty=format:%gd`
a następnie wyszukaj „WIP on”, aby przejść do następnej skrytki.gitk --reflog
pozwala zobaczyć wszystkie skrytki i więcej.Aby wyświetlić wszystkie zmiany w niewyskakującym schowku:
Aby wyświetlić zmiany jednego konkretnego pliku w niepakowanym schowku:
źródło
-p
jest skrótem od--patch
. Opcja pochodzi zgit-diff
. Jeśli wolisz długą formę, możesz pisaćgit stash show --patch
.Poza rekomendacją gitk w Czy można wyświetlić podgląd zawartości ukrytej w git? możesz zainstalować TIG i zadzwoń
tig stash
. Ten darmowy / otwarty program konsoli pozwala również wybrać, którą skrytkę chcesz porównaćźródło
P
i!
.gitk
stosunkowo łatwo jest zhakować go, aby pokazać wszystkie skrytki .Używam tego, aby zobaczyć wszystkie moje skrytki z podświetlaniem różnic kolorów (w Fedorze 21):
(Na podstawie Git: zobacz, co jest w skrytce bez zastosowania skrytki )
źródło
Kiedy pytanie zostało zadane po raz pierwszy, być może nie była to opcja, ale jeśli używasz PyCharm, możesz użyć
UnStash Changes
narzędzia (VCS-> Git-> UnStash Changes ...). Pozwala to wyświetlić listę ukrytych zmian, a także pop, upuścić, wyczyścić lub zastosować (w razie potrzeby do nowej gałęzi):i przeglądaj zmienione pliki według skrytki:
a także różnice w pliku. W różnicach możesz wybrać pojedyncze zmiany, aby zastosować zmiany ukryte do działającej gałęzi (używając szewronu skierowanego w lewo):
źródło
Możesz wyświetlić listę wszystkich skrytek za pomocą następującego polecenia:
Najnowsza skrytka jest pierwsza.
Możesz po prostu wybrać indeks
n
skrytki z powyższej listy i użyć następującego polecenia, aby wyświetlić szczegóły skrytkiPodobnie,
Możesz także sprawdzić różnicę za pomocą polecenia:
źródło
tak, najlepszym sposobem, aby zobaczyć, co jest modyfikowane, jest zapisanie w pliku w ten sposób:
źródło
Najpierw możemy skorzystać z listy skrytek git, aby uzyskać wszystkie elementy skrytki:
Następnie możemy użyć
git stash show stash@{N}
do sprawdzenia plików pod określoną skrytkąN
. Jeśli go zwolnimy, możemy uzyskać:Powodem tego może być to, że skorupa zjada nawiasy klamrowe i git widzi,
stash@2
a niestash@{2}
. Aby to naprawić, musimy użyć pojedynczych cudzysłowów dla nawiasów klamrowych, takich jak:źródło
Zobacz listę ukrytych zmian
Do przeglądania listy plików zmienionych w określonej skrytce
Do przeglądania określonego pliku w skrytce
źródło
Pokaż wszystkie skrytki
Tylko nazwy plików:
Pełna zawartość pliku we wszystkich skrytkach:
Otrzymasz pokolorowane wyjście różnicowe, które możesz przewijać stronami space (do przodu ) i b( do tyłu ) oraz qzamykać pager dla bieżącego skrytki. Jeśli wolisz mieć go w pliku, dołącz
> stashes.diff
do polecenia.źródło
Oprócz istniejących odpowiedzi, które sugerują użycie (aby pokazać różnicę między skrytkami od trzeciego do ostatniego)
Zauważ, że w
git-stash
dokumentacji jest napisane, żeDlatego możliwe jest również użycie (jest to odpowiednik powyższego polecenia)
Co powinno również uniknąć niektórych problemów z Powershell .
źródło
Podoba mi się, jak
gitk
mogę pokazać dokładnie to, co nie zostało wyśledzone lub siedzi w indeksie, ale domyślnie pokaże te ukryte „zatwierdzenia” pośrodku wszystkich innych zatwierdzeń w bieżącej gałęzi.Sztuką jest uruchomienie gitk w następujący sposób:
(Cytowanie ma umożliwić działanie w programie Powershell, ale w ten sposób powinno działać również w innych powłokach).
Jeśli spojrzysz na tę składnię na stronie pomocy gitrevisions , znajdziesz następujące informacje:
To najwyraźniej spowoduje, że gitk znajdzie się w takim trybie, że tylko bezpośredni rodzice wybranego zatwierdzenia zostaną pokazani, co dokładnie mi się podoba.
Jeśli chcesz posunąć się dalej i wymienić wszystkie skrytki, możesz uruchomić to:
(Te pojedyncze cudzysłowy w backtikach są konieczne, aby uspokoić Basha, w przeciwnym razie narzeka na wykrzyknik)
Jeśli korzystasz z systemu Windows i używasz cmd lub Powershell:
źródło
Poniższej komendy można użyć do wyodrębnienia różnicy ukrytej zmiany w każdym innym skrytce, zatwierdzeniu, gałęzi lub HEAD.
Zobaczmy, jak możemy użyć każdego z wyżej wymienionych poleceń.
Aby uzyskać różnicę między najwyżej ukrytą skrytką @ {0} a gałęzią master:
$ git diff stash @ {0} master
Wyświetlaj tylko nazwy plików bez różnic zmian:
$ git diff - stash-only-name @ {0} master
Zobacz różnicę między wybranymi skrytkami dla wybranego pliku:
$ git diff stash @ {0} ^ 1 stash @ {0} -
Zobacz różnicę między dwiema ostatnimi skrytkami:
$ git difftool stash @ {0} stash @ {0} ^ 1
git difftool --dir-diff stash @ {0} stash @ {0} ^ 1
Podsumowanie:
Polecenia przydatne do wyodrębnienia pliku różnicowego z wybranej skrytki git stash show, git show, git diff, git difftool.
Zobacz różnicę za pomocą polecenia git stash show,
git stash show -p stash @ {0}
Zobacz zmiany w skrytce za pomocą polecenia git show,
git show stash @ {1}
Zobacz różnicę między ostatnim ukrytym a wybranym zatwierdzeniem za pomocą polecenia git diff,
git diff stash @ {0}
Bibliografia:
https://howto.lintel.in/how-to-see-stashed-changes-using-git-stash/
https://git-scm.com/docs/git-show
https://git-scm.com/docs/git-stash
źródło