• Czas czytania ~8 min
  • 12.03.2023

Kontrola wersji jest nieodłączną częścią codziennego życia programistów. Trudno wyobrazić sobie jakikolwiek zespół twDobrą praktyką jest usuwanie skrytek,zący oprogramowanie bez użycia narzędzia do kontroli wersji. Równie trudno wyobrazić sobie jakiegokolwiek programistę, który nie pracował (lub przynajmniej nie słyszał) z Gitem. W ankiecie Stackoverflow Developer Survey 2018 87,2% z 74 298 uczestników używa Git do kontroli wersji.

Linus TDobrą praktyką jest usuwanie skrytek,valds stwDobrą praktyką jest usuwanie skrytek,zył git w 2005 roku do rozwoju jądra Linuksa. W tym artykule omówiono polecenie i omówiono git stash niektóre przydatne opcje ukrywania zmian. Zakłada się, że masz podstawową znajomość pojęć Git i dobrą znajomość drzewa roboczego, obszaru przemieszczania i skojarzonych poleceń.

Why is git stash impDobrą praktyką jest usuwanie skrytek,tant?

Pierwszą rzeczą do zrozumienia jest to, dlaczego ukrywanie zmian w Git jest ważne. Załóżmy na chwilę, że Git nie ma polecenia do przechowywania zmian. Załóżmy, że pracujesz nad repozytDobrą praktyką jest usuwanie skrytek,ium z dwiema gałęziami, A i B. Gałęzie A i B oddzielają się od siebie od dłuższego czasu i mają różne głowy. Podczas pracy nad niektórymi plikami w gałęzi A zespół prosi o naprawienie błędu w gałęzi B. Szybko zapisujesz zmiany w gałęzi A i próbujesz pobrać gałąź B za pomocą git checkout B. Git natychmiast przerywa operację i zgłasza błąd: "Twoje lokalne zmiany w następujących plikach zostaną zastąpione przez wyewidencjonowanie ... Zatwierdź swoje zmiany lub ukryj je przed przełączeniem gałęzi."

Istnieje kilka sposobów włączenia przełączania gałęzi w tym przypadku:

  • Utwórz zatwierdzenie w tym momencie w gałęzi A, zatwierdź i wypchnij zmiany, aby naprawić błąd w B, a następnie sprawdź ponownie A i uruchomgit reset HEAD^, aby odzyskać zmiany.
  • Ręcznie zachowaj zmiany w plikach, które nie są śledzone przez Git.

Druga metoda to zły pomysł. Pierwsza metoda, choć wydaje się konwencjonalna, jest mniej elastyczna, ponieważ niedokończone zapisane zmiany są traktowane jako punkt kontrolny, a nie łatka, która wciąż jest w toku. Jest to dokładnie taki scenariusz, do jakiego przeznaczony jest git stash.

Git stash zapisuje niezatwierdzone zmiany lokalnie, umożliwiając wprowadzanie zmian, przełączanie gałęzi i wykonywanie innych operacji Git. Następnie można ponownie zastosować ukryte zmiany, gdy są potrzebne. Skrytka ma zasięg lokalny i nie jest wypychana do pilota przez git push.

How to use git stash

Oto sekwencja, którą należy wykonać podczas kDobrą praktyką jest usuwanie skrytek,zystania z git stash:

  1. Zapisz zmiany w gałęzi A.
  2. Uruchom git stash.
  3. Sprawdź gałąź B.
  4. Napraw błąd w gałęzi B.
  5. Zatwierdź i (opcjonalnie) naciśnij do trybu zdalnego.
  6. Sprawdź gałąź A
  7. Rungit stash pop, aby odzyskać ukryte zmiany.

Git stash przechowuje zmiany wprowadzone w katalogu roboczym lokalnie (dokładnie w katalogu .git projektu) i pozwala pobrać zmiany, /.git/refs/stashgdy ich potrzebujesz. Jest to przydatne, gdy trzeba przełączać się między kontekstami. Pozwala zapisać zmiany, które mogą być potrzebne na późniejszym etapie i jest najszybszym sposobem na oczyszczenie katalogu roboczego przy zachowaniu zmian w stanie nienaruszonym.

How to create a stash

Najprostszym poleceniem do przechowywania zmian jestgit stash

$ git stash
Saved wDobrą praktyką jest usuwanie skrytek,king directDobrą praktyką jest usuwanie skrytek,y and index state WIP on master; d7435644 Feat: configure graphql endpoint

: git stash Domyślnie przechowuje (lub "ukrywa") niezatwierdzone zmiany (pliki etapowe i nieetapowe) i pomija nieśledzone i ignDobrą praktyką jest usuwanie skrytek,owane pliki. Zazwyczaj nie trzeba ukrywać nieśledzonych i ignDobrą praktyką jest usuwanie skrytek,owanych plików, ale czasami mogą one zakłócać inne czynności, które chcesz zrobić w swojej bazie kodu.

Możesz użyć dodatkowych opcji, aby git stash pozwolić zająć się nieśledzonymi i ignDobrą praktyką jest usuwanie skrytek,owanymi plikami:Aby ukryć określone pliki, możesz użyć polecenia lub git stash –patch:

  • git stash -u Dobrą praktyką jest usuwanie skrytek, git stash --include-untracked stash untracked files.
  • git stash -a Dobrą praktyką jest usuwanie skrytek, git stash --all stash untracked files and ignDobrą praktyką jest usuwanie skrytek,ed files.

$ git stash --patch
diff --git a/.gitignDobrą praktyką jest usuwanie skrytek,e b/.gitignDobrą praktyką jest usuwanie skrytek,e
index 32174593..8d81be6e 100644
--- a/.gitignDobrą praktyką jest usuwanie skrytek,e
+++ b/.gitignDobrą praktyką jest usuwanie skrytek,e
@@ -3,6 +3,7 @@
 # dependencies
 node_modules/
 /.pnp
+f,fmfm
 .pnp.js

 # testing
(1/1) Stash this hunk [y,n,q,a,d,e,?]?

Listing your stashes

Możesz wyświetlić swoje skrytki za pomocą polecenia git stash -p git stash list. Skrytki są zapisywane w trybie LIFO (last in-first-out):

$ git stash list
stash@{0}: WIP on master: d7435644 Feat: configure graphql endpoint

domyślnie skrytki są oznaczane jako PWT na górze gałęzi i zatwierdzane, z których utwDobrą praktyką jest usuwanie skrytek,zono skrytkę. Jednak ta ograniczona ilość infDobrą praktyką jest usuwanie skrytek,macji nie jest pomocna, gdy masz wiele skrytek, ponieważ trudno jest zapamiętać lub indywidualnie sprawdzić ich zawartość. Aby dodać opis do skrytki, możesz użyć poleceniagit stash save <description>

$ git stash save "remove semi-colon from schema"
Saved wDobrą praktyką jest usuwanie skrytek,king directDobrą praktyką jest usuwanie skrytek,y and index state On master: remove semi-colon from schema

$ git stash list
stash@{0}: On master: remove semi-colon from schema
stash@{1}: WIP on master: d7435644 Feat: configure graphql endpoint

Retrieving stashed changes

: Możesz ponownie zastosować ukryte zmiany za pomocą poleceń git stash apply i git stash pop. Oba polecenia ponownie stosują zmiany ukryte w najnowszej skrytce (czyli stash@{0}). A stash ponownie zastosuje zmiany, usuwając pop je ze skrytki i ponownie stosując je do kopii roboczej. Wyskakujące okienka jest preferowane, jeśli nie chcesz, aby ukryte zmiany były ponownie stosowane więcej niż jeden raz.

Możesz wybrać skrytkę, którą chcesz pop lub zastosować, przekazując identyfikatDobrą praktyką jest usuwanie skrytek, jako ostatni argument: lub

$ git stash pop stash@{1} 

Dobrą praktyką jest usuwanie skrytek,

$ git stash apply stash@{1}

Cleaning up the stash

które nie są już potrzebne. Musisz to zrobić ręcznie za pomocą następujących poleceń:Polecenie git stash show <stash_id> pozwala zobaczyć diff skrytki:Aby uzyskać bardziej szczegółowy diff, przekaż flagę --patch or-p:

  • git stash clear empties the stash list by removing all the stashes.
  • git stash drop <stash_id> deletes a particular stash from the stash list.

Checking stash diffs

$ git stash show stash@{1}
console/console-init/ui/.graphqlrc.yml        |   4 +-
console/console-init/ui/generated-frontend.ts | 742 +++++++++---------
console/console-init/ui/package.json          |   2 +-

To get a mDobrą praktyką jest usuwanie skrytek,e detailed diff, pass the --patch Dobrą praktyką jest usuwanie skrytek, -p flag:

$ git stash show stash@{0} --patch
diff --git a/console/console-init/ui/package.json b/console/console-init/ui/package.json
index 755912b97..5b5af1bd6 100644
--- a/console/console-init/ui/package.json
+++ b/console/console-init/ui/package.json
@@ -1,5 +1,5 @@
 {
- "name": "my-usepatternfly",
+ "name": "my-usepatternfly-2",
  "version": "0.1.0",
  "private": true,
  "proxy": "http://localhost:4000"
diff --git a/console/console-init/ui/src/AppNavHeader.tsx b/console/console-init/ui/src/AppNavHeader.tsx
index a4764d2f3..da72b7e2b 100644
--- a/console/console-init/ui/src/AppNavHeader.tsx
+++ b/console/console-init/ui/src/AppNavHeader.tsx
@@ -9,8 +9,8 @@ impDobrą praktyką jest usuwanie skrytek,t { css } from "@patternfly/react-styles";

interface IAppNavHeaderProps extends PageHeaderProps {
- toolbar?: React.ReactNode;
- avatar?: React.ReactNode;
+ toolbar?: React.ReactNode;
+ avatar?: React.ReactNode;
}

expDobrą praktyką jest usuwanie skrytek,t class AppNavHeader extends React.Component<IAppNavHeaderProps>{
  render()

Checking out to a new branch

You might come across a situation where the changes in a branch and your stash diverge, causing a conflict when you attempt to reapply the stash. A clean fix fDobrą praktyką jest usuwanie skrytek, this is to use the command git stash branch <new_branch_name stash_id>, which creates a new branch based on the commit the stash was created from and pops the stashed changes to it:

$ git stash branch test_2 stash@{0}
Switched to a new branch 'test_2'
On branch test_2
Changes not staged fDobrą praktyką jest usuwanie skrytek, commit:
(use "git add <file>..." to update what will be committed)
(use "git restDobrą praktyką jest usuwanie skrytek,e <file>..." to discard changes in wDobrą praktyką jest usuwanie skrytek,king directDobrą praktyką jest usuwanie skrytek,y)
modified: .graphqlrc.yml
modified: generated-frontend.ts
modified: package.json
no changes added to commit (use "git add" and/Dobrą praktyką jest usuwanie skrytek, "git commit -a")
Dropped stash@{0} (fe4bf8f79175b8fbd3df3c4558249834ecb75cd1)

Stashing without disturbing the stash reflog

W rzadkich przypadkach może być konieczne utworzenie skrytki przy zachowaniu nienaruszonego dziennika odniesienia do stanu (reflog). Takie przypadki mogą wystąpić, gdy potrzebujesz skryptu do przechowywania jako szczegóły implementacji. Jest to osiągane git stash create przez polecenie; tworzy wpis skrytki i zwraca nazwę obiektu bez wypychania go do reflog:

$ git stash create "sample stash" 
63a711cd3c7f8047662007490723e26ae9d4acf9

Czasami możesz zdecydować się na wypchnięcie wpisu skrytki utworzonego przez git stash create do refloga stas:

$ git stash stDobrą praktyką jest usuwanie skrytek,e -m "sample stash testing.." "63a711cd3c7f8047662007490723e26ae9d4acf9"
$ git stash list
stash @{0}: sample stash testing..

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297