Nie mam doświadczenia z Git, ale staram się przyzwyczaić i jak dotąd używam go tylko do projektów, nad którymi pracuję sam.
Kiedy koduję, naturalnie pojawia się jakieś podejście odgórne (ponieważ nie znam przyszłości) i pojawia się powtarzający się motyw:
Wykonuję trochę pracy.
Dowiaduję się, że aby moja praca stała się czymś „zobowiązującym”, muszę wykonać inną pracę.
Druga praca zasługuje na własne zatwierdzenie.
Przez coś godnego polecenia rozumiem coś, co się kompiluje lub coś, co nie jest całkowitym bałaganem.
I przez coś, co zasługuje na własne zatwierdzenie, mówię o tym, że nauczyłem się, że zatwierdzanie powinno zrobić tylko jedną rzecz.
Sposób, w jaki to rozwiązuję, jest uciążliwy. Jeśli inna praca znajduje się w innym pliku, tworzę nową gałąź, zatwierdzam ją i łączę. Jeśli praca znajduje się w tym samym pliku ... ugh .. Wykonuję lokalną kopię i resetuję plik do stanu HEAD, dokonuję wymaganego zatwierdzenia, a następnie zaczynam przywracać moją pracę z kopii. Jak powinienem sobie z tym poradzić? Nie sądzę, że tak to jest, prawda? Nie zakładam, bo to musi zdarzać się często każdemu (przynajmniej nie znającemu przyszłości). A może wydaje się, że mój przepływ pracy może być wadliwy?
git status
aby zobaczyć wszystkie zmienione pliki i wykonać dwa lub więcej zatwierdzeń, używającgit add
określonych plików (zamiastgit add --all
) i zatwierdzając kawałek po kawałku.git add -p
a następnie zatwierdzić tylko te części. To bardzo potężna technika i używam jej prawie cały czas.Odpowiedzi:
Istnieje wiele sposobów rozwiązania tego problemu.
Jeśli chcesz wprowadzić zmiany dla pierwszego zatwierdzenia bez ingerowania w bieżące zmiany, możesz użyć
git stash
. Spowoduje to usunięcie wszystkich otwartych zmian, umożliwiając przywrócenie ich później. Użyj,git status
aby zobaczyć, że już ich nie ma. Teraz stwórz pierwszy zatwierdzenie, jak zwykle. Następnie możesz użyćgit stash pop
do przywrócenia pierwotnych zmian i utworzenia drugiego zatwierdzenia, wykonując swoją podstawową pracę.Innym sposobem byłoby wprowadzenie wszystkich wymaganych zmian, a następnie utworzenie dwóch zatwierdzeń, z których oba zawierają część twojej pracy. Aby to zrobić, możesz użyć indeksu (zwanego również obszarem przemieszczania) dostarczonego przez git. Jest to specjalny obszar, którego możesz użyć do przygotowania zatwierdzeń. Zakładając, że zmieniłeś wiele plików, możesz dodać każdy z nich do indeksu za pomocą
git add
. Podczas wykonywaniagit commit
zatwierdzone zostaną tylko pliki dodane do indeksu.git status
pokaże, które części Twoich zmian zostaną zatwierdzone, a które nie. Na przykład będzie wyglądać w ten sposób po zmianie plików a.txt, b.txt i c.txt, a następniegit add a.txt
:Kiedy robisz
git commit
w tym stanie, tylko zmiany do a.txt zostaną dodane do twojego zatwierdzenia.Dodatkowo możesz przejrzeć dokładne zmiany
git diff --cached
, które zostaną zatwierdzone , co pokaże różnicę wszystkich zmian, które zostaną zatwierdzone .Jeśli jeden plik zawiera zmiany dla obu zatwierdzeń, możesz również dodać tylko jego część do indeksu, używając „git add --patch b.txt”. git dostarczy ci tryb interaktywny, który prosi o każdą zmianę w danym pliku, czy należy go dodać do indeksu. Może to stać się trudniejsze, jeśli masz zmiany w wierszach obok siebie, które muszą być podzielone na dwa zatwierdzenia, ale są też sposoby na rozwiązanie tego.
Jeśli chcesz dowiedzieć się więcej na temat miejsca postoju, możesz przeczytać to: http://gitready.com/beginner/2009/01/18/the-staging-area.html
Możesz także przeczytać więcej o interaktywnym dodawaniu tutaj: http://nuclearsquid.com/writings/git-add/
źródło
Jeśli używasz GUI dla Git, takiego jak SourceTree firmy Atlassian, lub
git gui
możesz zatwierdzać części plików i pozostawiać inne części niezaangażowane. W rzeczywistości możesz zatwierdzać poszczególne wiersze kodu.Robię to często, kiedy upadam w królicze nory, jak to opisujesz. Jest to świetny sposób na dokonanie tego sensownego zatwierdzenia lub zatwierdzenia jako prekursora głównego zatwierdzenia.
Możesz to zrobić z wiersza poleceń, ale jest to trochę niezdarne.
Kiedy możesz zatwierdzać na poziomie łatki Git i poszczególnych linii, nie musisz tworzyć nowych gałęzi, ukrywać, zatwierdzać, ukrywać i scalać. Po prostu kontynuuj pracę i nie przerywaj przepływu. Dobrze ci idzie.
źródło