Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> git push wybranego commita a nie wszystko
nospor
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Nattfarinn
post
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
Go to the top of the page
+Quote Post

Posty w temacie
- 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
- - Nattfarinn   Możesz to zrobić w dowolnym momencie. W skrócie, r...   2.04.2015, 13:35:52
- - nospor   Dzieki, pobawie sie jeszcze tym sposobem   2.04.2015, 13:49:09


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 05:22