Czy powinienem używać git stash, aby zapisywać bieżące zmiany mojego projektu i przekazywać go do github, aby uzyskać dostęp do innych komputerów?


20

Bardzo często pracuję nad niektórymi cechami mojego projektu, że muszę zrobić sobie przerwę, zanim będzie wystarczająca do zatwierdzenia. Jednak używam codziennie dwóch różnych komputerów do kodowania (mój laptop i pulpit mojego laboratorium badawczego). Np .: pracuję nad funkcją w domu, a potem zatrzymuję się i idę do laboratorium.

Nie chcę mieszać synchronizacji w chmurze (np. Dropbox) ze zdalnym śledzeniem GitHub.

Po prostu popełniłem niedokończone (i niechlujne) stany mojego kodu przed (i wypchnąłem go) tylko w celu wciągnięcia go na inny komputer, aby kontynuować pracę. Jestem pewien, że to zła praktyka.

Dziś jednak natknąłem git stashsię trochę na Googlinga. Wydaje się to idealnym rozwiązaniem dla tego, czego potrzebuję.

Jednak dokumentacja nie mówi, czy przejdzie do github po wprowadzeniu zmian. Poza tym chcę wiedzieć, czy istnieje bardziej skuteczny sposób na osiągnięcie mobilności, której potrzebuję.

Z góry dziękuję!


1
Głosuję za zamknięciem tego pytania jako nie na temat, ponieważ odpowiedź została już udzielona na stosie przepełnienia
David Arno

5
@DavidArno: Nie sądzę, że jest to duplikat z innej witryny. Pytanie StackOverflow dotyczy „Czy mogę zrobić X”, a to dotyczy „Czy X to dobra praktyka”. Przynajmniej podstawowa przyczyna pytania jest inna.
Greg Burghardt,

7
@DavidArno ostatni raz sprawdziłem: „Już odpowiedziałem na SO” nie jest powodem do zamknięcia pytania.
RubberDuck,

Odpowiedzi:


28

Po prostu popełniłem niedokończone (i niechlujne) stany mojego kodu przed (i wypchnąłem go) tylko w celu wciągnięcia go na inny komputer, aby kontynuować pracę. Jestem pewien, że to zła praktyka.

Popełnianie niechlujnej niedokończonej pracy jest w porządku. Wykonuj swoją pracę w branży tematycznej. Popełniaj wcześnie i często popełniaj. Czytaj dalej Kiedy zatwierdzić kod? po wskazówki dotyczące tego, kiedy dokonać zatwierdzenia. Specjalnie dla Gita, zaangażuj się w gałąź tematyczną i pchaj ją tak często, jak chcesz.

Jeśli ta gałąź tematów jest właśnie dla Ciebie, zatwierdzaj i wypychaj uszkodzony kod. Należy tylko Defer od pchania złamany kod do oddziału, który jest używany przez innych ludzi. Nie krępuj się złamać własnego kodu.


6
Powiedziałbym nawet, że jest silniejszy: nigdy nie pracuj w gałęzi master, zawsze używaj gałęzi tematu. Zaangażuj się w to, co uważasz za stosowne, pchaj go nieustraszenie. Kiedy będziesz zadowolony ze zmian, połącz je w celu opanowania.
9000

Dobra rada! Myślę, że może się zdarzyć wielkie zamieszanie, ponieważ musimy dodać komentarz do zatwierdzenia, a czasami dosłownie będzie to coś w rodzaju „zadania w toku” lub czegoś takiego. I tak, pracuję sam w tej branży, więc wszystko, co powiedziałeś, ma sens!
Leandro,

4
Daje to również opcję zgniatania pojedynczych zatwierdzeń w jedno podczas łączenia gałęzi git merge - poprawka quascha
snoopy

2
Wiadomości zatwierdzania @Leandro powinny być tak atomowe i jasne, jak ma to sens. Na przykład, nawet jeśli jest to WIP, możesz powiedzieć na przykład „Dodawanie kontrolera do obsługi żądań stron - WIP”. Komunikaty zatwierdzenia dostarczają również przeszukiwalną historię zmian wprowadzonych do projektu. Dziesięć zatwierdzeń „WIP” nie pomogłoby każdemu, kto szukałby zmiany dotyczącej obsługi użytkowników.
Ben

7

Skrytki są przeznaczone do użytku lokalnego, jako tymczasowe miejsce do układania rzeczy podczas bałaganu z gałęziami.

Jeśli jesteś jedynym pracującym w oddziale, nie ma problemu z popełnieniem zepsutego kodu. To, co robię, gdy w podobnych sytuacjach jest zrobienie złamanego zatwierdzenia, a następnie po pociągnięciu go w inne miejsce, wykonaj jego git reset HEAD~1cofnięcie. Oczywiście wymaga to użycia --forcena twoim urządzeniu pullsi pushespo zmianie lokalizacji.

Albo po prostu czekam do pierwszego zatwierdzenia i robię git commit --amend. Albo po prostu wyciskam wszystkie złamane zatwierdzenia, gdy zatwierdzam gałąź funkcji. Albo po prostu nie martwię się o kilka wyraźnie zaznaczonych złamanych zobowiązań w mojej historii, ponieważ zwykle nie wychodzę, dopóki nie znajdę się w dobrym miejscu. Istnieje wiele opcji.


1
Nie zalecałbym jednak przyzwyczajania się, --amendwięc wymaga --forceto popychania. Lepiej zaangażuj się tylko w odrzutową gałąź.
leftaroundabout

1

stashnie jest tak naprawdę satysfakcjonujący dla niczego poza czyszczeniem katalogu roboczego w celu „odblokowania gałęzi”; jeśli nie od razu staniesz stash popsię stanem, sprawy staną się bardzo zagmatwane.

Jeśli trzeba zapisać rzeczywistą pracę, nawet jeśli nie nadaje się ona do stałego wpisu repo, nadal powinna być zatwierdzona. W rzeczywistości nigdy nie zostawiam mojego katalogu roboczego w stanie, który nie jest pod kontrolą wersji - używam bardzo prostych skryptów Python, aby zapisać każdą zmianę jako tymczasowe zatwierdzenie. Jeśli chcesz spróbować, oto co możesz zrobić:

  1. Kiedy wykonałeś niedokończoną pracę i masz zamiar opuścić miejsce pracy, wykonaj git-tmp-commit. Automatycznie zatwierdzi wszystkie zmiany w nowym, unikalnym oddziale.
  2. Wciśnij tę gałąź do pilota.
  3. Wyjechać.
  4. Aby kontynuować, sklonuj tę gałąź ponownie z pilota. Robię to za pomocą ccdskryptu, który faktycznie sprawdza wszystko od zera do folderu tymczasowego , automatycznie wybierając najnowszą gałąź ... ale możesz też po prostu ręcznie pobrać i pobrać gałąź temporary-commits/original-branch/YYYY-MM-DD...z istniejącego klonu repo.
  5. Na koniec „cofnij zatwierdzenie” zmian za pomocą git-tmp-commit -r. Spowoduje to powrót do oryginalnej gałęzi (np. master) I pozostawienie zmian tymczasowego zatwierdzenia w katalogu roboczym, abyś mógł kontynuować tutaj, aż nadejdzie czas na prawidłowe zatwierdzenie (lub tymczasowe, jeśli będziesz musiał ponownie wyjść).

Sposób pisania skryptu w tej chwili działa tylko wtedy, gdy masterw repozytorium transakcji nie ma gałęzi . W razie wątpliwości musiałbyś git branch -d master; to oczywiście nie jest naprawdę idealne ...

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.