Skrytka jest specjalnym zatwierdzeniem scalania drzewa roboczego między zatwierdzeniem bazowym a indeksem. Jednym ze sposobów może być zapisanie każdego z nich jako oddzielnych łatek, pobranie pierwszego skrytki nadrzędnego, przywrócenie indeksu i drzewa pracy z dwóch poprawek i wreszcie przywrócenie skrytki (wydaje się, że jedna odpowiedź idzie w ten sposób).
Jest to potrzebne do pełnego odtworzenia wszystkich informacji ze skrytki, a jeśli nie przejmujesz się tym, powinieneś przynajmniej sprawdzić pierwszego rodzica skrytki przed jej przywróceniem, aby uniknąć konfliktów i śledzić, gdzie skrytka została utworzona.
To właśnie zrobiłem, aby w pełni przywrócić wszystkie skrytki z jednego repo do drugiego. Jeśli nie możesz mieć ich na tym samym komputerze, możesz zapisać tagi ukryte w pakiecie po ich utworzeniu i skopiować listę referencji i pakiet na komputer docelowy.
Z katalogu głównego oryginalnego repozytorium:
- Uzyskaj listę referencji ukrytych
- Oznacz swoje referencje skrytek, abyś mógł je pobrać za pomocą git fetch (nazwy znaczników nie mają znaczenia, zmień je, jeśli wystąpi konflikt. Użyłem
stash_ + liczb (y) w logicznym oznaczeniu ukryć)
- Przekształć odniesienia logiczne w skróty sha1 w odwrotnej kolejności - wykorzystamy je później
- Zapisz tę ścieżkę repo - również na później
refs=$(git stash list|cut -d: -f1)
for ref in $refs; do tag stash_${ref//[^0-9]} $ref; done
refs=$(git rev-parse $refs|tac)
oldpath=$PWD
Uwaga: To wymaga bash lub kompatybilnej powłoki (ksh, zsh powinny zrobić ...) Możesz również zwiększyć zmienną, np. stash_$((i++))Jeśli twoja powłoka nie obsługuje${param//pattern}
Teraz w nowym repozytorium dla każdego ref:
- Pobierz referencję ze starego repozytorium (nie musimy nawet używać nazw tagów, ponieważ oznaczyliśmy je tagami, możemy je odzyskać za pomocą git fetch)
- Ponownie zaimportuj skrytkę z referencji, używając tematu tej referencji jako wiadomości ukrytej.
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
git stash savejest teraz przestarzałe na korzyśćgit stash push