Czasami mam problem z nieprzydzieleniem kodu na stacji roboczej, która nie jest gotowa na zatwierdzenie, ale musi zostać ukończona na innej stacji roboczej lub laptopie.
Czy ktoś ma rozwiązanie tego problemu, takie jak „miękkie zatwierdzenie” lub inny sposób przeniesienia zmian na inny komputer w celu pracy nad nim w innym miejscu?
Wolałbym nie być zmuszany do zatwierdzania i wypychania zmian, które nie są odpowiednio wdrażane.
git stash
...?Odpowiedzi:
Poniżej założono, że Twoje lokalne repozytorium jest klonem repozytorium na innym serwerze, np. Github; i że masz prawa do wprowadzania zmian na serwerze nadrzędnym. W moim przykładzie nazwałem to repozytorium „upstream”. Uruchom,
git remote show
aby wyświetlić listę innych repozytoriów, może to podpowiedzieć, jak się nazywa.Sugerowałbym utworzenie oddziału, wtedy możesz sprawdzić oddział na innym komputerze. W rzeczywistości, jeśli utworzysz oddział, gdy tylko zaczniesz pracę, możesz „zatwierdzić” do swojego oddziału, uzyskać ślad i kopię zapasową swojej pracy, bez konieczności posiadania stabilnego zestawu kodów. Gdy będziesz zadowolony ze swojej pracy, możesz połączyć ją z powrotem w swoją gałąź „master”.
git checkout -b MyNewBranch
git push origin MyNewBranch
git checkout MyNewBranch
git checkout master
git merge MyNewBranch
git branch
źródło
git branch -d master
”, jestem zdezorientowany, czy to nie prosi gita o usunięcie gałęzi master? (i tak mam wrażenie po przeczytaniu instrukcji oddziału git)Możesz użyć,
git diff
aby utworzyć łatkę, a następnie zastosować ją na innym komputerze. Możesz też utworzyć tymczasowe zatwierdzenie, a następnie pobrać je z innego komputera. Możesz nawet utworzyć gałąź tymczasową na innym komputerze, wcisnąć tam tymczasowe zatwierdzenie, a następnie usunąć gałąź.Moja ulubiona metoda to druga: utworzenie tymczasowego zatwierdzenia, następnie przejście do innej maszyny i wykonanie czegoś takiego:
źródło
git format-patch
?git diff
. Czy czegoś brakuje?git format-patch deadbee..badcab1e
- Tworzy.patch
pliki dla każdego zatwierdzenia osobno z zachowaną ładną nazwą i komunikatem zatwierdzenia.I zobowiązać go. I popchnąć go do osobistego oddziału , sprawdź na drugą stronę i zmienić. Po zakończeniu usuń osobisty oddział.
Oczywiście możesz przepychać bezpośrednio między repozytoriami, możesz użyć pakietu lub
format-patch
/am
, ale gałąź osobista jest zdecydowanie najłatwiejszym rozwiązaniem. A przepisywanie historii nie jest wielkim problemem, o ile nie jest przekazywane do żadnej udostępnionej gałęzi. W wielu projektach ludzie powinni przewinąć gałęzie funkcji, aby ułatwić ich zrozumienie do przeglądu.źródło
Proste podejście to takie, które opisujesz: skopiuj
.git
ukryty katalog i pliki projektu na inną maszynę, gdzie możesz albo zatwierdzić i zakończyć, albo po prostu kontynuować pracę..git
Katalog jest git, gdzie historia jest przechowywana, więc zachowanie to wraz z rzeczywistymi plikami utrzymuje cała historia projekt nienaruszone.Jeśli na stałe korzystasz z oryginalnej maszyny, prawdopodobnie zaleciłbym to podejście.
źródło
Podobnie jak inni odpowiedzieli, w Git nie powinieneś martwić się o niedokończony kod w swoich osobistych oddziałach. Jeśli jednak z jakiegoś powodu naprawdę naprawdę nie chcesz, aby Twoja niedokończona praca dotknęła głównego repozytorium, możesz skorzystać z rozproszonej natury Git!
Istnieje proste narzędzie o nazwie,
git bundle
które może pomóc w łatwym przekazywaniu zmian bez centralnego repozytorium. Najpierw sklonuj repozytorium:wprowadź zmiany i przekaż je do tymczasowego oddziału:
Teraz spakuj je zmiany:
Teraz masz plik pakietu, który możesz wysłać na nowy komputer. Jak go tam wykorzystujesz? Utwórzmy nową kopię roboczą:
musimy traktować nasz pakiet jako innego pilota, abyśmy mogli pobrać z niego zmiany
ponieważ chodziło o przeniesienie zmian bez pozostawiania śladu, będziemy chcieli zgnieść je do kopii roboczej, aby stracić tymczasowe zatwierdzenie:
i wszystko, co pozostało, to usunąć tymczasowego pilota:
ALTÓWKA! Zmiany zostały przeniesione do nowej kopii roboczej bez pozostawiania śladu ani oddziału, ani zatwierdzenia!
Ale tak naprawdę - ten proces jest dość długi i uciążliwy. To jest Git, a nie SVN - naprawdę nie powinno być żadnego powodu, aby nie wypychać osobistego oddziału do centralnego repozytorium.
źródło