Szukaj…
Składnia
-
git stash list [<options>]
-
git stash show [<stash>]
-
git stash drop [-q|--quiet] [<stash>]
-
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
-
git stash branch <branchname> [<stash>]
-
git stash [save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [<message>]]
-
git stash clear
-
git stash create [<message>]
-
git stash store [-m|--message <message>] [-q|--quiet] <commit>
Parametry
Parametr | Detale |
---|---|
pokazać | Pokaż zmiany zarejestrowane w skrytce jako różnicę między stanem skrytki a jej pierwotnym elementem nadrzędnym. Gdy nie podano <stash>, pokazuje najnowszą. |
lista | Wymień skrytki, które aktualnie masz. Każda skrytka jest wymieniona wraz z nazwą (np. Skrytka @ {0} jest najnowszą skrytką, skrytka @ {1} to ta poprzednia itp.), Nazwa gałęzi, która była aktualna w momencie wykonania skrytki, oraz krótka opis zatwierdzenia, na którym oparto składnicę. |
Muzyka pop | Usuń pojedynczy stan ukryty z listy ukrytych i zastosuj go nad bieżącym działającym drzewem. |
zastosować | Jak pop , ale nie usuwaj stanu z listy skrytek. |
jasny | Usuń wszystkie ukryte stany. Pamiętaj, że te stany będą wówczas podlegać przycinaniu i ich odzyskanie może być niemożliwe. |
upuszczać | Usuń pojedynczy stan ukryty z listy ukrytych przedmiotów. Jeśli nie podano <stash>, usuwa najnowszą. tj. skrytka @ {0}, w przeciwnym razie <stash> musi być prawidłowym odwołaniem do dziennika skrytki formularza stash @ {<revision>}. |
Stwórz | Utwórz skrytkę (która jest zwykłym obiektem zatwierdzania) i zwróć jej nazwę obiektu, bez przechowywania go w dowolnym miejscu w przestrzeni nazw ref. Ma to być przydatne w skryptach. Prawdopodobnie nie jest to polecenie, którego chcesz użyć; patrz „zapisz” powyżej. |
sklep | Przechowuj daną skrytkę utworzoną za pomocą git stash create (która jest wiszącym zatwierdzeniem scalania) w odnośniku skrytki, aktualizując dziennik skrytki. Ma to być przydatne w skryptach. Prawdopodobnie nie jest to polecenie, którego chcesz użyć; patrz „zapisz” powyżej. |
Uwagi
Przechowywanie pozwala nam mieć czysty katalog roboczy bez utraty jakichkolwiek informacji. Następnie można rozpocząć pracę nad czymś innym i / lub zmienić gałęzie.
Co to jest Stashing?
Podczas pracy nad projektem możesz znajdować się w połowie zmiany gałęzi funkcji, gdy zostanie zgłoszony błąd w stosunku do master. Nie jesteś gotowy, aby zatwierdzić swój kod, ale nie chcesz też utracić swoich zmian. Tutaj przydaje się git stash
.
Uruchom git status
w oddziale, aby wyświetlić niezatwierdzone zmiany:
(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Następnie uruchom git stash
aby zapisać te zmiany w stosie:
(master) $ git stash
Saved working directory and index state WIP on master:
2f2a6e1 Merge pull request #1 from test/test-branch
HEAD is now at 2f2a6e1 Merge pull request #1 from test/test-branch
Jeśli pliki zostały dodane do katalogu roboczego, można je również ukryć. Musisz je najpierw ustawić.
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
NewPhoto.c
nothing added to commit but untracked files present (use "git add" to track)
(master) $ git stage NewPhoto.c
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
nothing to commit, working tree clean
(master) $
Twój katalog roboczy jest teraz wolny od wszelkich wprowadzonych zmian. Możesz to zobaczyć ponownie uruchamiając git status
:
(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Aby zastosować ostatnią skrytkę, uruchom git stash apply
(dodatkowo możesz zastosować i usunąć ostatnią skrytkę zmienioną za pomocą git stash pop
):
(master) $ git stash apply
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Pamiętaj jednak, że ukrywanie nie pamięta gałęzi, nad którą pracowałeś. W powyższych przykładach, użytkownik został stashing na pana. Jeśli przełączą się na gałąź deweloperów , dev i uruchom git stash apply
ostatnią skrytkę na gałęzi dev .
(master) $ git checkout -b dev
Switched to a new branch 'dev'
(dev) $ git stash apply
On branch dev
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Utwórz skrytkę
Zapisz bieżący stan katalogu roboczego i indeksu (znany również jako obszar przejściowy) na stosie skrytek.
git stash
Aby dołączyć wszystkie ukryte pliki do skrytki, użyj flag --include-untracked
lub -u
.
git stash --include-untracked
Aby dołączyć wiadomość do skrytki, aby ułatwić jej późniejszą identyfikację
git stash save "<whatever message>"
Aby pozostawić obszar przejściowy w bieżącym stanie po skrytce, użyj flag --keep-index
lub -k
.
git stash --keep-index
Wyświetl listę zapisanych skrytek
git stash list
Spowoduje to wyświetlenie listy wszystkich skrytek w stosie w odwrotnej kolejności chronologicznej.
Otrzymasz listę, która wygląda mniej więcej tak:
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
Możesz odwoływać się do określonej skrytki według jej nazwy, na przykład stash@{1}
.
Pokaż skrytkę
Pokazuje zmiany zapisane w ostatniej skrytce
git stash show
Lub konkretna skrytka
git stash show stash@{n}
Aby wyświetlić zawartość zmian zapisanych dla określonej skrytki
git stash show -p stash@{n}
Usuń skrytkę
Usuń wszystkie zapasy
git stash clear
Usuwa ostatnią skrytkę
git stash drop
Lub konkretna skrytka
git stash drop stash@{n}
Zastosuj i usuń skrytkę
Aby zastosować ostatnią skrytkę i usunąć ją ze stosu - wpisz:
git stash pop
Aby zastosować określoną skrytkę i usunąć ją ze stosu - wpisz:
git stash pop stash@{n}
Zastosuj skrytkę bez jej usuwania
Stosuje ostatnią skrytkę bez wyjmowania jej ze stosu
git stash apply
Lub konkretna skrytka
git stash apply stash@{n}
Odzyskiwanie wcześniejszych zmian ze skrytki
Aby uzyskać najnowszą skrytkę po uruchomieniu skrytki git, użyj
git stash apply
Aby zobaczyć listę swoich skrytek, użyj
git stash list
Otrzymasz listę, która wygląda mniej więcej tak
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
Wybierz inną skrytkę git, którą chcesz przywrócić, z liczbą wyświetlaną dla żądanej skrytki
git stash apply stash@{2}
Częściowa skrytka
Jeśli chcesz ukryć tylko niektóre różnice w zestawie roboczym, możesz użyć ukrytego fragmentu.
git stash -p
A następnie interaktywnie wybierz, które skrawki przystawić.
Począwszy od wersji 2.13.0 można także uniknąć trybu interaktywnego i utworzyć częściowe ukrywanie ze specyfikacją ścieżki za pomocą nowego słowa kluczowego push .
git stash push -m "My partial stash" -- app.config
Zastosuj część skrytki przy kasie
Zrobiłeś skrytkę i chcesz pobrać tylko niektóre pliki w tej skrytce.
git checkout stash@{0} -- myfile.txt
Interaktywne składowanie
Ukrywanie zajmuje brudny stan katalogu roboczego - to znaczy zmodyfikowane pliki śledzenia i zmiany etapowe - i zapisuje je na stosie niedokończonych zmian, które można ponownie zastosować w dowolnym momencie.
Ukrywanie tylko zmodyfikowanych plików:
Załóżmy, że nie chcesz ukrywać plików przemieszczanych i przechowuj tylko zmodyfikowane pliki, aby móc użyć:
git stash --keep-index
Które przechowują tylko zmodyfikowane pliki.
Przechowywanie nieśledzonych plików:
Skrytka nigdy nie zapisuje nieśledzonych plików, tylko ukrywa zmodyfikowane i przemieszczane pliki. Załóżmy więc, że jeśli chcesz ukryć również nieśledzone pliki, możesz użyć tego:
git stash -u
spowoduje to śledzenie nieśledzonych, przemieszczonych i zmodyfikowanych plików.
Ukryj tylko niektóre zmiany:
Załóżmy, że musisz ukryć tylko część kodu z pliku lub tylko niektóre pliki ze wszystkich zmodyfikowanych i ukrytych plików, możesz to zrobić w następujący sposób:
git stash --patch
Git nie ukryje wszystkiego, co zostało zmodyfikowane, ale interaktywnie wyświetli monit o wybór zmian, które chcesz ukryć, a które chcesz zachować w katalogu roboczym.
Przenieś trwające prace do innej gałęzi
Jeśli podczas pracy zauważysz, że znajdujesz się w niewłaściwej gałęzi i nie utworzyłeś jeszcze żadnych zatwierdzeń, możesz łatwo przenieść swoją pracę do poprawienia gałęzi za pomocą ukrywania:
git stash
git checkout correct-branch
git stash pop
Pamiętaj, że git stash pop
zastosuje ostatnią skrytkę i usunie ją z listy skrytek. Aby zachować skrytkę na liście i zastosować ją tylko do niektórych oddziałów, możesz użyć:
git stash apply
Odzyskaj upuszczoną skrytkę
Jeśli dopiero co go otworzyłeś, a terminal jest nadal otwarty, na ekranie nadal będzie drukowana wartość skrótu za pomocą polecenia git stash pop
:
$ git stash pop
[...]
Dropped refs/stash@{0} (2ca03e22256be97f9e40f08e6d6773c7d41dbfd1)
(Zauważ, że upuszczenie git również tworzy tę samą linię.)
W przeciwnym razie możesz go znaleźć, używając tego:
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
Spowoduje to wyświetlenie wszystkich zatwierdzeń na końcach wykresu zatwierdzeń, do których nie ma już odniesienia z żadnej gałęzi lub tagu - każde utracone zatwierdzenie, w tym każde utworzone przez Ciebie ukryte zatwierdzenie, będzie znajdować się gdzieś na tym wykresie.
Najłatwiejszym sposobem na znalezienie zatwierdzonego skrytki jest prawdopodobnie przekazanie tej listy do gitk
:
gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )
Spowoduje to uruchomienie przeglądarki repozytorium pokazującej każde zatwierdzenie w repozytorium , niezależnie od tego, czy jest osiągalne, czy nie.
Możesz zamienić gitk
coś takiego jak git log --graph --oneline --decorate
jeśli wolisz ładny wykres na konsoli niż osobną aplikację GUI.
Aby wykryć zatwierdzenia ukryć, poszukaj komunikatów zatwierdzania tego formularza:
WIP w somebranch : commithash Jakaś stara wiadomość zatwierdzenia
Gdy znasz skrót, który chcesz, możesz zastosować go jako ukryty:
git stash apply $stash_hash
Lub możesz użyć menu kontekstowego w gitk
aby utworzyć gałęzie dla wszystkich nieosiągalnych zatwierdzeń, którymi jesteś zainteresowany. Następnie możesz robić z nimi, co chcesz, za pomocą wszystkich zwykłych narzędzi. Kiedy skończysz, po prostu ponownie zdmuchnij te gałęzie.