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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow