Post
#1
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Hej, jak w git mogę zrobić push do wybranego repozytorium ale push tylko wybranego commita lub wybranych commitow a nie wszystkich?
Po co mi to? Załóżmy że mam repozytorium core, z ktorego korzystają wszystkie nowe projekty. I gdy np. rozwijam projekt 3 i zrobie tam zmianę, która jest uniwersalna i ważna i powinna się znaleźć w innych projektach. Chcę więc ją wrzucic do core, by inny projekty mogły z tamtąd te ważną zmianę pociągnąć. Nie chcę jednak wrzucać innych commitow, ktore robiłem w projekt 3, gdyż one są zbędne w innych projektach |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 136 Pomógł: 22 Dołączył: 19.09.2007 Skąd: Sosnowiec Ostrzeżenie: (0%)
|
Możesz to zrobić w dowolnym momencie. W skrócie, robisz to tak:
Kod $ cd /path/to/local/repository $ git remote add core git@github.com:core.git # dodaje kolejne repozytorium remote i nazywa je core $ git fetch core $ git checkout -b core core/master # przełącza Cię na nieistniejącego jeszcze lokalnie brancha o nazwie core z upstreamem core/master I w sumie tyle. Branch 'core' tak naprawdę prowadzi do brancha 'master' repozytorim 'git@github.com:core.git' Jak napiszesz na branchu 'myfeature' jakiś feature który chciałbyś wrzucić do 'git@github.com:core.git': Kod $ git checkout core $ git pull --rebase # zaciągnij zmiany przenosząc niepushnięte dotąd zmiany na samą górę $ git cherry-pick hash_commita $ git push $ git checkout myfeature $ git rebase core # zmień bazę swojego brancha na core To ostatnie polecenie jest po to, żebyś miał 'core' na dole, a wszystkie swoje zmiany projektowe na górze. To powinno wywalić commit który cherry-pickowałeś, bo nie jest już potrzebny (jest częścią 'core'). Tylko musisz pamiętać, że jeśli Twój projekt dorobił się tysięcy commitów, to zmiana bazy 'core' może trochę potrwać. To wygląda tak, że git commit po commicie nakłada Twoje zmiany na bazę. To może spowodować konflikty, jeśli commit który cherry-pickowałeś jest zależny od struktury którą zbudowałeś dopiero w projekcie, ale to oczywiste. Jeśli w pewnym momencie zatrzyma Ci się rebase na konflikce, to po konflikcie nie zaczynasz procesu od nowa (bo dalej 'trwa' rebase) tylko kontynuujesz od miejsca w którym się zatrzymało przez polecenie: Kod $ git rebase --continue Może się też zdarzyć, że proces rebaseowania zatrzyma Ci się w momencie commitu który cherry-pickowałeś. Tutaj po prostu nie dam sobie głowy uciąć, bo zwyczajnie nie pamiętam, czy git załatwi to sobie automatycznie i pominie pusty commit czy też powie Ci, że commit jest pusty (bo zmiany przez tego nakładane zostały już nałożone wcześniej). Jeśli to drugie, to ignorujesz commit jako niepotrzebny poleceniem: Kod $ git rebase --skip Więcej Ci nie potrzeba w sumie. (IMG:style_emoticons/default/smile.gif) Edit: Jeśli rebase nie idzie po Twojej myśli, konfliktów pełno i końca nie widać, to zawsze możesz go przerwać za pomocą: Kod $ git rebase --abort To w ułamku sekundy przywróci Ci stan sprzed polecenia rebase. Ogólnie rebase to najpotężniejsze narzędzie jakie stoi za gitem. Za tydzień nie będziesz mógł bez niego żyć. Przenoszenie, łączenie, zmiana nazw commitów jest mega wygodna za pomocą trybu rebase interactive. Ten post edytował Nattfarinn 2.04.2015, 13:49:24 |
|
|
|
nospor git push wybranego commita a nie wszystko 17.03.2015, 19:47:12
tzm Kiedyś jak sobie wyrabiałem swój workflow który ni... 17.03.2015, 19:55:20
nospor Aktualnie bawie się z branchami i cherry-pick. Byc... 17.03.2015, 20:17:46
pyro Co prawda cherry-pick zadziała do tego co mówisz (... 17.03.2015, 20:25:56
nospor Faktycznie, nie ten dzial. Przenosze i nie zamykam... 17.03.2015, 20:27:42
tzm sugestia że nospor chciałby to przeanalizować bosk... 17.03.2015, 20:29:51
pyro Z opisu wyżej nie wywróżę struktury Twojego projek... 17.03.2015, 20:34:48
nospor pyro czyli chyba nie zrozumiales tego co napisalem... 17.03.2015, 20:35:50
pyro Jeżeli przeczytasz jeszcze raz pierwszy post temat... 17.03.2015, 20:45:20
nospor Wiekszosc moich projektow ma ten sam "core... 17.03.2015, 20:53:08
pyro W takim razie ten "core" to jakiś zbiór ... 17.03.2015, 21:09:54
nospor Nie, core to nie jest zbior narzedzi. core to core... 17.03.2015, 21:12:44
pyro Core jako core też może być submodułem 17.03.2015, 21:15:05
nospor Tak, ale akurat nie w tym przypadku.
Rozumiem o c... 17.03.2015, 21:45:16
Pyton_000 No taa ale już Kto Ci pomagał to ja nie powiem
C... 17.03.2015, 22:03:59 
pyro Cytat(Pyton_000 @ 17.03.2015, 22:03:5... 17.03.2015, 22:31:26
com No tak, @pyro niektórzy są jeszcze niezreformowani 17.03.2015, 22:52:34
nospor CytatNo taa ale już Kto Ci pomagał to ja nie powie... 18.03.2015, 07:01:09
vokiel @nospor czyli Ty budujesz aplikację na core (modyf... 18.03.2015, 09:16:29
nospor Cytat@nospor czyli Ty budujesz aplikację na core (... 18.03.2015, 09:25:15
com Najlepiej przebudować to już na tym etapie i oszcz... 18.03.2015, 10:06:42
nospor CytatNajlepiej przebudować to już na tym etapie i ... 18.03.2015, 10:14:04
com ok, w porządku
to zależy jak na to spojrzeć. Bo ... 18.03.2015, 10:24:44
pyro @nospor, wcześniej podałeś przykład
Cytat(nospor ... 18.03.2015, 10:34:51
nospor CytatI akurat te wszystkie funkcje posiada np. Use... 18.03.2015, 10:40:28
Nattfarinn Nie chce być Evil NecroPosterem (ale nie przesadza... 2.04.2015, 12:14:18
nospor No tego --rebase to przyznaje się bez bicia jeszcz... 2.04.2015, 12:22:54
nospor Dzieki, pobawie sie jeszcze tym sposobem 2.04.2015, 13:49:09 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 05:22 |