Pytanie: słownie commit Ajest rozgałęziony off masteri popracować na nim, tworząc zobowiązuje potomnych Bprzez E. Powiedz, Eże dodano tylko 1 linię z D. Jeśli git cherry-pick Esię master, to zastosować wszystkie zmiany z Apośrednictwem Ew masterbranży, czy też tylko zastosować zmianę od Dcelu E, a mianowicie, że to dodaje tylko 1 wiersz master? Jeśli jest to pierwsza sprawa, jak mogę osiągnąć drugą? (oprócz ręcznego kopiowania i wklejania)
chharvey
7
git cherry-pick -n <commit> Jeśli nie chcesz automatycznie zatwierdzać cherry-pick.
Ben Flynn
6
Jeśli BranchA nie został wypchnięty do zdalnego, możesz zmienić kolejność zatwierdzeń za pomocą, rebasea następnie po prostu merge. Lepiej jest używać mergeover, rebasegdy jest to możliwe, ponieważ nie tworzy duplikatów zatwierdzeń.
git checkout BranchA
git rebase -i HEAD~113
... reorder the commits so the 10 you want are first ...
git checkout BranchB
git merge [the 10th commit]
Innym sposobem na przeniesienie wprowadzonej pracy z jednej gałęzi do drugiej jest jej wybranie. Najlepszy wybór w Git jest jak rebase dla pojedynczego zatwierdzenia. Pobiera łatkę wprowadzoną w zatwierdzeniu i próbuje ponownie zastosować ją w gałęzi, z której aktualnie korzystasz. Jest to przydatne, jeśli masz kilka zatwierdzeń w gałęzi tematycznej i chcesz zintegrować tylko jedną z nich, lub jeśli masz tylko jedną zmianę w gałęzi tematycznej i wolisz ją wybrać, zamiast uruchamiać rebase. Na przykład załóżmy, że masz projekt, który wygląda następująco:
Jeśli chcesz pobrać commit e43a6 do swojej gałęzi master, możesz uruchomić
$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
3 files changed, 17 insertions(+), 3 deletions(-)
To pociąga za sobą tę samą zmianę wprowadzoną w e43a6, ale otrzymujesz nową wartość SHA-1 zatwierdzenia, ponieważ zastosowana data jest inna. Teraz twoja historia wygląda tak:
Teraz możesz usunąć gałąź tematyczną i porzucić zmiany, których nie chcesz pobierać.
Odpowiedzi:
git cherry-pick <commit>
Komenda pozwala wziąć jeden commit (niezależnie od branży) i zasadniczo zmieniają bazę go w swoim oddziale roboczej.Rozdział 5 książki Pro Git wyjaśnia to lepiej niż ja , wraz z diagramami i tym podobne. ( Rozdział o Rebasing jest również dobrą lekturą).
Na koniec jest kilka dobrych komentarzy na temat wybierania wiśniowego vs łączenia vs ponownego bazowania w innym pytaniu SO .
źródło
A
jest rozgałęziony offmaster
i popracować na nim, tworząc zobowiązuje potomnychB
przezE
. Powiedz,E
że dodano tylko 1 linię zD
. Jeśligit cherry-pick E
sięmaster
, to zastosować wszystkie zmiany zA
pośrednictwemE
wmaster
branży, czy też tylko zastosować zmianę odD
celuE
, a mianowicie, że to dodaje tylko 1 wierszmaster
? Jeśli jest to pierwsza sprawa, jak mogę osiągnąć drugą? (oprócz ręcznego kopiowania i wklejania)Jeśli BranchA nie został wypchnięty do zdalnego, możesz zmienić kolejność zatwierdzeń za pomocą,
rebase
a następnie po prostumerge
. Lepiej jest używaćmerge
over,rebase
gdy jest to możliwe, ponieważ nie tworzy duplikatów zatwierdzeń.źródło
ŹRÓDŁO: https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work
Innym sposobem na przeniesienie wprowadzonej pracy z jednej gałęzi do drugiej jest jej wybranie. Najlepszy wybór w Git jest jak rebase dla pojedynczego zatwierdzenia. Pobiera łatkę wprowadzoną w zatwierdzeniu i próbuje ponownie zastosować ją w gałęzi, z której aktualnie korzystasz. Jest to przydatne, jeśli masz kilka zatwierdzeń w gałęzi tematycznej i chcesz zintegrować tylko jedną z nich, lub jeśli masz tylko jedną zmianę w gałęzi tematycznej i wolisz ją wybrać, zamiast uruchamiać rebase. Na przykład załóżmy, że masz projekt, który wygląda następująco:
Jeśli chcesz pobrać commit e43a6 do swojej gałęzi master, możesz uruchomić
To pociąga za sobą tę samą zmianę wprowadzoną w e43a6, ale otrzymujesz nową wartość SHA-1 zatwierdzenia, ponieważ zastosowana data jest inna. Teraz twoja historia wygląda tak:
Teraz możesz usunąć gałąź tematyczną i porzucić zmiany, których nie chcesz pobierać.
źródło