Używam od git stash pop
dłuższego czasu. Niedawno dowiedziałem się o git stash apply
poleceniu. Kiedy go wypróbowałem, wydawało się, że działa tak samo jak git stash pop
.
Jaka jest różnica między git stash pop
i git stash apply
?
Używam od git stash pop
dłuższego czasu. Niedawno dowiedziałem się o git stash apply
poleceniu. Kiedy go wypróbowałem, wydawało się, że działa tak samo jak git stash pop
.
Jaka jest różnica między git stash pop
i git stash apply
?
Odpowiedzi:
git stash pop
wyrzuca (najwyżej domyślnie) skrytkę po jej zastosowaniu, git stash apply
pozostawiając ją na liście skrytek w celu ewentualnego późniejszego ponownego wykorzystania (lub możesz wtedy git stash drop
).
Dzieje się tak, chyba że później git stash pop
wystąpią konflikty , w którym to przypadku nie usunie skrytki, pozostawiając ją dokładnie taką samą git stash apply
.
Innym sposobem, aby na to spojrzeć: git stash pop
jest git stash apply && git stash drop
.
git stash pop
wynik, nadal występuje błąd konfliktu.
Mam ten pomocny link, który określa różnicę, jak stwierdził John Zwinck, i wadą git stash pop
.
Powiedzmy na przykład, że twoje zmiany ukryte są w konflikcie z innymi zmianami, które wprowadziłeś od czasu pierwszego utworzenia skrytki. Zarówno pop, jak i zastosuj, aktywują tryb rozwiązywania konfliktów scalania, umożliwiając ładne rozwiązanie takich konfliktów… i żadne z nich nie pozbędzie się skrytki, chociaż być może oczekujesz też popu. Ponieważ wiele osób spodziewa się, że skrytki są zwykłym stosem, często prowadzi to do przypadkowego późniejszego wyrzucenia tego samego skrytki, ponieważ myśleli, że go nie ma.
Link: http://codingkilledthecat.wordpress.com/2012/04/27/git-stash-pop-consanted-harmful/
Widząc to w akcji, możesz lepiej zrozumieć różnicę.
Zakładając, że pracujemy nad master
gałęzią i mamy plik hello.txt
zawierający ciąg „Hello”.
Zmodyfikujmy plik i dodajmy do niego ciąg „world”. Teraz chcesz przejść do innej gałęzi, aby naprawić właśnie znaleziony drobny błąd, więc musisz stash
wprowadzić zmiany:
git stash
Przeprowadziłeś się do drugiej gałęzi, naprawiłeś błąd i teraz możesz kontynuować pracę nad master
gałęzią, więc pop
zmiany:
git stash pop
Teraz, jeśli spróbujesz przejrzeć zawartość skrytki, otrzymasz:
$ git stash show -p
No stash found.
Jeśli jednak użyjesz git stash apply
zamiast tego, otrzymasz ukrytą zawartość, ale również ją zatrzymasz:
$ git stash show -p
diff --git a/hello.txt b/hello.txt
index e965047..802992c 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1 +1 @@
-Hello
+Hello world
Podobnie pop
jest z popem stosu - w rzeczywistości usuwa element po jego pęknięciu, a apply
bardziej przypomina podglądanie .
W git
zapasach to powierzchnia magazynowa, gdzie obecne pliki zmienione mogą zostać przeniesione.
stash
Obszar jest przydatny, gdy chcesz pobrać niektóre zmiany z git
repozytorium i wykryć pewne zmiany w niektórych plikach wzajemnych dostępnych w git
repozytorium.
git stash apply //apply the changes without removing stored files from stash area.
git stash pop // apply the changes as well as remove stored files from stash area.
Uwaga: -
git apply
stosuj zmiany tylko z obszaru skrytki podczasgit pop
stosowania, a także usuwaj zmiany zstash
obszaru.
Git Stash Pop vs apply
Working
Jeśli chcesz zastosować najlepsze ukryte zmiany do bieżącej zmiany niestacjonarnej i usunąć również tę skrytkę, powinieneś wybrać git stash pop
.
# apply the top stashed changes and delete it from git stash area.
git stash pop
Ale jeśli chcesz zastosować swoje najważniejsze zmiany do bieżącej zmiany niestopowej bez usuwania jej, powinieneś wybrać git stash apply
.
Uwaga: Możesz powiązać ten przypadek z
Stack
klasąpop()
ipeek()
metodami, w których pop zmienia górę za pomocą dekrementów (top = top-1), alepeek()
może tylko uzyskać element najwyższy.