Git diff przeciwko stashowi
Jak mogę zobaczyć zmiany, które un-stashing wprowadzi w bieżącym drzewie roboczym? Chciałbym wiedzieć, jakie zmiany zostaną wprowadzone przed ich zastosowaniem!
14 answers
Zobacz najnowszy Schowek:
git stash show -p
Zobacz dowolny Schowek:
git stash show -p stash@{1}
From the git stash
manpages:
Domyślnie polecenie wyświetla diffstat, ale przyjmie dowolny format znany git diff (np. git stash show-p stash@{1} Aby wyświetlić drugi ostatni stash w formie patcha).
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-01-18 09:28:53
Aby zobaczyć najnowszy Schowek:
git stash show -p
Aby zobaczyć dowolny Schowek:
git stash show -p stash@{1}
Używam również git diff do porównywania stash ' a z dowolną gałęzią.
Możesz użyć:
git diff stash@{0} master
Aby zobaczyć wszystkie zmiany w porównaniu do Branch master.
Lub możesz użyć:
git diff --name-only stash@{0} master
Aby łatwo znaleźć tylko zmienione nazwy plików.
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-02-02 10:39:29
Jeśli gałąź, na której bazują twoje ukryte zmiany, zmieniła się w międzyczasie, to polecenie może być użyteczne:
git diff stash@{0}^!
Porównuje skrytkę z zatwierdzeniem, na którym jest oparta.
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
2013-03-27 13:23:38
Jeśli twoje drzewo robocze jest brudne, możesz porównać je do skrytki, najpierw wykonując polecenie brudne drzewo robocze, a następnie porównując je do skrytki. Następnie możesz cofnąć commit za pomocą brudnego drzewa roboczego (ponieważ możesz nie chcieć mieć tego brudnego commita w dzienniku zmian).
Możesz również użyć poniższego podejścia, aby porównać ze sobą dwa znaki (w tym przypadku po prostu pop jeden z tych znaków na początku).
-
Popełnij swoją brudną robotę drzewo:
git add . git commit -m "Dirty commit"
-
Diff the stash with that commit:
git diff HEAD stash@{0}
-
Następnie możesz przywrócić commit i umieścić go z powrotem w katalogu roboczym:
git reset --soft HEAD~1 git reset .
Teraz rozszyfrowałeś drzewo brudnej roboty swoim towarem i wróciłeś do miejsca, w którym byłeś na początku.
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
2016-07-26 23:35:57
@Magne ' S ODPOWIEDŹ jest jedyną (bardzo późną) datą, która odpowiada na najbardziej elastyczną / użyteczną interpretację pytania, ale jest to sprawiedliwe nieco bardziej skomplikowane niż to konieczne. Zamiast zatwierdzać i resetować, po prostu Schowaj kopię roboczą, porównaj, a następnie Odinstaluj.
git stash save "temp"
git diff stash@{0} stash@{1}
git stash pop
Pokazuje różnice między górną częścią stosu skrytki a Twoim folderem roboczym, tymczasowo zmieniając folder roboczy na górną część stosu skrytki (stash@{0}), przesuwając oryginalny top down one (stash@{1}) następnie porównując użycie oryginalnego top w pozycji "nowy zestaw", aby zobaczyć zmiany, które wynikałyby z zastosowania go na górze bieżącej pracy.
"Ale co, jeśli nie mam żadnej bieżącej pracy?" wtedy jesteś w normalnym nudnym przypadku. Po prostu użyj @Amber ' s answer
git stash show
Or @czerasz ' s answer
git diff stash@{0}
Albo przyznać, że schowanie i schowanie jest szybkie i łatwe, po prostu odinstaluj zmiany i sprawdź je. Jeśli nie chcesz je w tej chwili wyrzucić (aktualny indeks / folder roboczy zmienia się). W całości to
git stash apply
git diff
git reset
git checkout
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
2018-11-22 13:50:44
To działa dla mnie na git w wersji 1.8.5.2:
git diff stash HEAD
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
2014-01-22 23:36:15
Na wszelki wypadek, aby porównać plik w drzewie roboczym i w skrytce, użyj poniższego polecenia
git diff stash@{0} -- fileName (with path)
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
2019-05-16 00:47:42
W zależności od tego, z czym chcesz porównać skrytkę (lokalne drzewo robocze / commit nadrzędny / commit Główny), w rzeczywistości dostępnych jest kilka komend, wśród których stare dobre git diff
i bardziej szczegółowe git stash show
:
╔══════════════════════╦═══════════════════════════════╦═══════════════════╗
║ Compare stash with ↓ ║ git diff ║ git stash show ║
╠══════════════════════╬═══════════════════════════════╬═══════════════════╣
║ Local working tree ║ git diff stash@{0} ║ git stash show -l ║
║----------------------║-------------------------------║-------------------║
║ Parent commit ║ git diff stash@{0}^ stash@{0} ║ git stash show -p ║
║----------------------║-------------------------------║-------------------║
║ HEAD commit ║ git diff stash@{0} HEAD ║ / ║
╚══════════════════════╩═══════════════════════════════╩═══════════════════╝
Podczas gdy git stash show
wygląda na bardziej przyjazny dla użytkownika na pierwszy rzut oka, git diff
jest w rzeczywistości bardziej wydajny, ponieważ umożliwia określanie nazw plików dla bardziej skoncentrowanego Diffa. Osobiście skonfigurowałem aliasy dla wszystkich tych poleceń w moim zsh Git plugin .
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
2021-01-30 10:27:57
Jeśli masz narzędzia do diff (takie jak beyond compare)
git difftool stash HEAD
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-09 08:08:27
Jednym ze sposobów, aby to zrobić bez przesuwania czegokolwiek jest wykorzystanie faktu, że patch
może odczytać git diff ' s (Unified diffs basically)
git stash show -p | patch -p1 --verbose --dry-run
To pokaże Ci krok po kroku, co zwykle zrobiłby patch. Dodatkową korzyścią jest to, że patch nie powstrzyma się przed zapisaniem patcha do drzewa roboczego, jeśli z jakiegoś powodu naprawdę potrzebujesz git ' a, aby zamknąć temat commiting-before-modifying, Usuń --dry-run i postępuj zgodnie z instrukcją instrukcje.
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
2018-02-07 23:44:20
Łącząc to, czego nauczyłem się w tym wątku i w tym, Kiedy chcę zobaczyć "co jest w skrytce", najpierw biegnę:
git stash show stash@{0}
Pokaże, jakie pliki zostały zmodyfikowane. Następnie, aby uzyskać ładny wizualny diff w difftool, robię:
git difftool --dir-diff stash@{0} stash@{0}^
Spowoduje wyświetlenie wszystkich różnic naraz danej skrytki względem jej rodzica.
Możesz skonfigurować narzędzie diff w ~/.gitconfig
, np. za pomocą Meld:
...
[diff]
tool = meld
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 11:47:29
Uważam, że git diff <current-branchname>..stash@{0}
jest najbardziej intuicyjnym sposobem porównywania zmian pomiędzy lokalnym drzewem roboczym a najnowszą skrytką. W razie potrzeby należy zastąpić stash@{0}
odpowiednim numerem skrytki.
Uważaj, że git diff stash@{0}
może przynieść mylące wyniki. Jeśli dwie historie twojego skrytki i bieżącej gałęzi się od siebie różnią, różnica będzie wyglądać tak, jakbyś dodawał wszystkie nowe rzeczy do skrytki i usuwał wszystko unikalne dla bieżącej gałęzi.
Odpowiedź na podstawie git książka
Zwróć również uwagę, że Podwójna kropka ..
i potrójna kropka ...
określają różne porównania commitów, i mam na myśli podwójną kropkę dla tej odpowiedzi. Zobacz Git book po szczegóły
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
2020-07-20 02:15:31
FWIW Może to być nieco zbędne dla wszystkich innych odpowiedzi i jest bardzo podobne do zaakceptowanej odpowiedzi, która jest na miejscu; ale może to komuś pomoże.
git stash show --help
da Ci wszystko, czego powinieneś potrzebować; w tym informacje o pokazie skrytki.
Show [
] Pokazuje zmiany zapisane w schowku jako różnicę między stanem przechowywanym a jego oryginalnym rodzicem. Gdy nie jest podana, pokazuje najnowszą. Domyślnie polecenie pokazuje diffstat, ale zaakceptuje dowolny format znany gitowi diffowi (np. git stash show-p stash@{1}, Aby wyświetlić drugi najnowszy stash w formie patcha). Możesz użyć skrytki.showStat i / lub stash.zmienne konfiguracyjne showPatch do zmiany domyślnego zachowania.
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
2016-08-18 16:40:27
She the list of stash
git stash list
stash@{0}: WIP on feature/blabla: 830335224fa Name Commit
stash@{1}: WIP on feature/blabla2: 830335224fa Name Commit 2
Więc zdobądź numer skrytki i zrób:
Możesz zrobić:
git stash show -p stash@{1}
Ale jeśli chcesz mieć diff (to co innego pokazać skrytkę, dlatego piszę tę odpowiedź. Diff
zastanów się nad bieżącym kodem w swojej gałęzi i show
po prostu pokaż, co zastosujesz )
Możesz użyć:
git diff stash@{0}
Lub
git diff stash@{0} <branch name>
Kolejną ciekawą rzeczą do zrobienia jest:
git stash apply
git stash apply stash@{10}
Dotyczy to skrytki bez wyjmowania jej z lista, możesz git checkout .
usunąć te zmiany lub jeśli jesteś szczęśliwy git stash drop stash@{10}
usunąć skrytkę z listy.
Stąd nigdy nie polecam używać git stash pop
i używać kombinacji git stash apply
i git stash drop
jeśli zastosujesz skrytkę w niewłaściwej gałęzi... cóż, czasami trudno jest odzyskać kod.
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
2018-09-07 21:31:22