2012-11-23 8 views
9

Problem: Chcecie przetestować cechą ktoś rozwinął, ale to tylko istnieje w odległym oddziale, który jest niezmiernie nieaktualne.git - cherry-pick - HOWTO/WHYTO

Source

  1. Jak cherry-pick rozwiązać ten problem?
  2. Dlaczego nie będę używał git am lub git?

Odpowiedz

6

Problem: Chcecie przetestować cechą ktoś rozwinął, ale to tylko istnieje w odległym oddziale, który jest niezmiernie nieaktualne.

Po scaleniu lub ponownym uruchomieniu uzyskasz kilka starych zmian, które mogą być w konflikcie.

W przypadku zbioru wiśni przyjmuje się jeden zestaw zmian i odtwarza się go jako nowe zatwierdzenie w innej gałęzi.

Jest to przydatne, jeśli chcesz po prostu zatwierdzić do innego oddziału, bez jego historii.

Przydaje się użycie opcji -x, więc komunikat zatwierdzenia zawiera notatkę, z której wybrano wiśnia.

Dlaczego nie będę używał git am lub git?

ponieważ git stosuje się do nakładania łatek (plików) i git am do nakładania serii łatek. git cherry-pick stosuje zatwierdzenia - tzn. zatwierdza z twojego własnego repo, a zatwierdza import z innych repo.

4

Od git help cherry-pick:

git-cherry-pick - Zastosuj zmiany wprowadzone przez jakiegoś istniejącego zobowiązuje

[...]

Biorąc pod uwagę jeden lub więcej istniejących zobowiązuje, zastosować zmień każdy z nich, wprowadzając, nagrywając nowe zatwierdzenie dla każdego. Wymaga to wyczyszczenia drzewa roboczego (bez modyfikacji z zatwierdzenia HEAD).

Więc, kiedy cherry-pick commit, git zatrzymuje popełnić zmienia (ITS diff) i stara się stosować go w bieżącym katalogu roboczym, tworząc nowy popełnić który jest odpowiednikiem jednego jesteś cherry-pick ing.

Jest to sposób ponownego wprowadzenia zmian w innym zatwierdzeniu na innej linii historii.

Poza zmianami, cherry-pick zachowuje również oryginalne informacje o zatwierdzeniu, takie jak autor i tamto.

Wreszcie, cherry-pick może otrzymać grupę zatwierdzeń do złożenia wniosku, w którym to przypadku zachowa się tak jak cherry-pick je po kolei, w porządku chronologicznym (starsze pierwsze).

1

Problem:
Chcesz przetestować cechą ktoś rozwinął, ale istnieje tylko w odległym oddziale, który jest niezmiernie nieaktualne.

To rozwiązuje problem, ponieważ:

  • nie chcesz się połączyć starą gałąź tym zatwierdzeń, które już nie są istotne w obecnym stanie rozwoju
  • nie chcą zrewiduj swoją gałąź na starej gałęzi, aby uzyskać jedno zatwierdzenie.
  • nie trzeba scalić z powrotem swój oddział do tej starej gałęzi

Ostatni punkt jest ważny, ponieważ pierwszy wadą cherry-picking jest to, że wprowadza duplicate commits. Ale w twoim przypadku to nie ma znaczenia.

Inną wadą jest to, że zatwierdzenie, które wybierasz, może mieć wartość functional dependencies w oparciu o poprzednie zatwierdzenia (tego starego oddziału).
Innymi słowy, jego kod działa tylko z powodu innych kodów innych starszych commitów (które nie zostały wybrane przez wiarę).
To może być trudniejsze do wykrycia.

Powiązane problemy