/ / Kiedy przełączasz się z jednej gałęzi na drugą, czy gałąź docelowa ma dziedziczyć indeks i zmieniać pliki? - git

Przy przełączaniu z jednej gałęzi na drugą, czy gałąź docelowa ma dziedziczyć indeks i zmieniać pliki? - git

W Git mam eksperymentalną gałąź (EXP-12). Wprowadziłem tam pewne zmiany, ale nie jestem jeszcze gotowy do zatwierdzenia. Muszę wprowadzić poprawki na mistrzu.

Idę do mistrza.

Możliwe są dwa przypadki:

  1. Jeśli zawarłem moje zmiany w indeksie, gdy jest włączony EXP-12, pojawią się również w indeksie na gałęzi głównej.
  2. Gdybym nie włączał moich zmian do indeksu, gdy był włączony EXP-12, te pliki pojawią się jako zmiany nie wystawiane na zatwierdzenie w gałęzi głównej.

Moim problemem jest to, że chcę wszystko na master i EXP-12 być oddzielnym. Chcę wprowadzić pewne "eksperymentalne" zmiany EXP-12 > przejdź do master> wykonaj zmiany na master> stage wszystko dla commit (git add -A)> commit> przełącz się z powrotem na EXP-12 i kontynuuj eksperymenty. Teraz, jeśli to zrobię, moje zatwierdzenie w oddziale głównym obejmie wszystkie wprowadzone zmiany EXP-12.

Jaka jest logika tego? Czy może czegoś brakuje?

Odpowiedzi:

0 dla odpowiedzi № 1

Klasycznym rozwiązaniem tego problemu jest użycie git stash - kiedy już jesteś EXP-12 możesz to zrobić:

git stash save --keep-index "Some work-in-progress on EXP-12"

... następnie jak zwykle zmień oddział na master, wykonaj trochę pracy, zmień z powrotem i zastosuj najnowszą zawartość:

git checkout master

[... do some stuff ...]

git checkout EXP-12

git stash pop

Jednak osobiście wolę utworzyć zatwierdzenie typu praca w toku, a później:

  • Zmień go za pomocą git commit --amend
  • Przenieś gałąź z powrotem do poprzedniego zatwierdzenia, ale pozostawiając całą swoją pracę jako niezaprogramowane zmiany: git reset HEAD^
  • ... albo użyj git rebase -i <EARLIER-COMMIT> aby zgnieść razem kilka prac w toku.

Zaleta tworzenia faktycznego zatwierdzeniaużywanie skrytki polega na tym, że możesz zastosować skrytkę do każdego zatwierdzenia, nie tylko do tego, na którym ją zapisałeś, podczas gdy zwykłe zatwierdzenie przesuwa tę gałąź do przodu i jest powiązane z wcześniejszymi zatwierdzeniami.