Mam przed sobą BranchA
113 zatwierdzeń BranchB
.
Ale chcę, aby tylko ostatnie 10 zatwierdzeń zostało BranchA
scalonych z BranchB
.
Czy jest na to sposób?
Mam przed sobą BranchA
113 zatwierdzeń BranchB
.
Ale chcę, aby tylko ostatnie 10 zatwierdzeń zostało BranchA
scalonych z BranchB
.
Czy jest na to sposób?
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 .
A
jest rozgałęziony off master
i popracować na nim, tworząc zobowiązuje potomnych B
przez E
. Powiedz, E
że dodano tylko 1 linię z D
. Jeśli git cherry-pick E
się master
, to zastosować wszystkie zmiany z A
pośrednictwem E
w master
branży, czy też tylko zastosować zmianę od D
celu 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)
Jeśli BranchA nie został wypchnięty do zdalnego, możesz zmienić kolejność zatwierdzeń za pomocą, rebase
a następnie po prostu merge
. Lepiej jest używać merge
over, rebase
gdy 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]
Ź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ć
$ 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ć.