Mój scenariusz jest taki, że mam jedną gałąź, w której wprowadziłem duże ulepszenia w procesie budowania (gałąź A), aw innej pracuję nad niepowiązaną funkcją (gałąź B). Więc teraz, kiedy hakuję gałąź B, chcę pobrać rzeczy, które napisałem w gałęzi A, ponieważ chcę szybszych i łatwiejszych kompilacji. Jednak nie chcę „zanieczyszczać” mojej gałęzi B, po prostu dodam zmiany z gałęzi A do zmian niestacjonarnych.
Co próbowałem (stojąc na gałęzi B):
git merge --no-commit branchA
Nie działa, ponieważ umieszcza Cię w procesie scalania. Gdyby tak nie było, byłoby idealnie.
git checkout branchA -- .
Nie działa, ponieważ wprowadza zmiany między gałąźA..branchB, a nie wzorcem zmian..branchA.
Coś jeszcze?
Edycja: tak, zmiany w gałęzi A są zatwierdzone. W tym przykładzie jest tylko jedna gałąź z ulepszeniami kompilacji, ale może być do N gałęzi z ulepszeniami kompilacji, które chcę zastosować podczas pracy nad gałęzią funkcji.
Odpowiedzi:
Po prostu musiałem zrobić coś podobnego i udało mi się to naprawić, dodając
--squash
do polecenia scalaniaźródło
git commit —amend
i doda nowe zmiany do ostatniego zatwierdzenia, po prostu nie jestem do końca pewien, czy to działa na zatwierdzeniach scalającychcherry-pick -n
powinien robić, co chcesz, ale nie jestem pewien, dlaczego chcesz, aby ulepszenia kompilacji były zmianami niestacjonarnymi - to tylko utrudnia kilka rzeczy (np. scalanie innych zmian w zmodyfikowanych plikach lub ponowne bazowanie czegokolwiek).W takim przypadku utworzyłbym nową gałąź, C, którą scalisz zarówno z gałęzi A, jak i B (i wszelkich innych gałęzi z ulepszeniami kompilacji). Zatwierdź zmiany w gałęzi funkcji, B, a następnie połącz je z gałęzią C, która teraz zawiera ulepszenia kompilacji i zmiany gałęzi funkcji, dzięki czemu możesz je przetestować razem. Jeśli chcesz wprowadzić więcej zmian, zrób to w odpowiedniej gałęzi, a nie w C, a następnie połącz z C. Więc nigdy nie zmieniaj niczego w gałęzi C, po prostu użyj go do integracji zmian z innych gałęzi.
Oznacza to, że możesz używać wszystkich funkcji Gita w gałęzi C, zamiast żonglować niezatwierdzonymi zmianami w brudnym drzewie.
źródło
cherry-pick -n
: Utworzyłem działającą kopię mojego kodu, dodając wiele rzeczy w losowych miejscach. Teraz chcę wyczyścić mój kod przed zatwierdzeniem gałęzi tej funkcji. Więc przełączam się na gałąź tymczasową, zatwierdzam wszystkie zmiany. Wróć do gałęzi funkcji,cherry-pick
tego zatwierdzenia. Czy jest lepszy sposób na zrobienie tego?Powinieneś być w stanie wybrać najlepsze commity (
-n
aby uniknąć ich od razu).źródło
Nie jestem w 100% pewien, czy zrozumiałem to jasno, ale w moim przypadku właśnie utworzyłem łatkę różnicową między gałęziami, a następnie zastosowałem tę ścieżkę na gałęzi B.
W gałęzi A:
źródło
Nie jestem pewien, czy rozumiem Twoje wymagania.
Możesz uruchomić scalanie, a następnie zadzwonić
git reset HEAD~1
.Poniższa sekwencja powinna odtwarzać każde zatwierdzenie między
master
ibranchA
na górzebranchB
. Zatwierdzenia, które zostały już zastosowane,branchB
zostaną pominięte.źródło
--soft
opcję, jeśli nie chcesz zmian w obszarze pomostowym . Czy możesz narysować wykres, jak skonfigurowane są twoje oddziały?