W moim repozytorium mam gałąź o nazwie, nad aq
którą pracuję.
Następnie wykonałem nową pracę i wprowadziłem błędy master
.
Jaki jest najlepszy sposób, aby wprowadzić te zobowiązania do aq
oddziału? Utworzyć nowy oddział master
i połączyć go aq
?
git pull origin my_branch_name
Odpowiedzi:
Sprawdź
aq
oddział i wypuść bazęmaster
.źródło
git merge
byłoby lepiej. Jeśli obie gałęzie ewoluowały w czasie, powinieneś rozważyć, która z nich jest dla Ciebie najlepsza.Powinieneś być w stanie,
git merge origin/master
gdy jesteś w swoim oddziale aq.źródło
rebase
jeśli twój oddział jest lokalny i nie został zepchniętyorigin
. Użyj,merge
jeśli Twoja gałąź jest już wypchnięta.rebase
przepisze historię.Najpierw sprawdź do opanowania:
Dokonuj wszystkich zmian, poprawek i zatwierdzeń i pchaj swojego mistrza.
Wróć do swojego oddziału „aq” i scal w nim wzorzec:
Twój oddział będzie na bieżąco z master. Dobrym i podstawowym przykładem łączenia jest rozgałęzienie 3.2 Git - podstawowe rozgałęzienie i scalanie .
źródło
Nie ma gwarancji, że główne poprawki błędów nie znajdują się wśród innych zatwierdzeń, dlatego nie można po prostu scalić. Zrobić
zakładając, że te zatwierdzenia reprezentują poprawki błędów.
Od teraz jednak trzymaj poprawki błędów w osobnej gałęzi. Będziesz mógł po prostu
kiedy chcesz przenieść je wszystkie do zwykłej gałęzi deweloperów.
źródło
Albo
cherry-pick
odpowiednie rewizje język oddziałuaq
lub scalania oddziałumaster
język gałęziaq
.źródło
Połącz to z
aq
źródło
Łatwy sposób
źródło
Dla mnie wprowadziłem już zmiany i chciałem otrzymywać najnowsze informacje z oddziału podstawowego. Nie byłem w stanie tego zrobić
rebase
icherry-pick
trwałbym wieczność, więc wykonałem następujące czynności:więc w tym przypadku:
źródło
To ( stąd ) działało dla mnie:
Cytowanie:
źródło
Masz kilka opcji.
git rebase master aq
na gałęzi, która zachowa nazwy zatwierdzeń, ale NIE NALEŻY REBASOWAĆ, jeśli jest to gałąź zdalna. Możesz,git merge master aq
jeśli nie zależy ci na zachowaniu nazw zatwierdzeń. Jeśli chcesz zachować nazwy zatwierdzeń i jest to gałąź zdalna,git cherry-pick <commit hash>
zatwierdza zmiany w gałęzi.źródło
Możesz to również zrobić, uruchamiając jedną linię.
git merge aq master
Jest to równoważne z
źródło
git merge a b
łączy oddziałya
ib
do bieżącego oddziału. Alegit merge a
kiedy jesteś na gałęzia
, nic nie zrobisz (dlatego wygląda to tak, jakby robił to, co myślisz, że robi). (Zobacz git-scm.com/docs/git-merge#Documentation/.... )EDYTOWAĆ:
Moja odpowiedź poniżej dokumentów sposób scalić
master
waq
, gdzie jeśli zobaczyć szczegóły scaleniu to wymienia zmiany dokonane naaq
przed scaleniem, nie zmienia się namaster
. Uświadomiłem sobie, że prawdopodobnie nie tego chcesz, nawet jeśli tak uważasz!Właśnie:
jest w porządku.
Tak, to proste scalenie pokaże, że zmiany
master
zostały wprowadzoneaq
w tym punkcie, a nie na odwrót; ale to jest w porządku - skoro tak się stało! Później, kiedy w końcu scalisz swoją gałąźmaster
, to wtedy scalenie w końcu pokaże wszystkie twoje zmiany jako wykonanemaster
(co jest dokładnie tym, czego chcesz, i jest to zatwierdzenie, w którym ludzie i tak będą oczekiwać, aby znaleźć te informacje).Sprawdziłem, a poniższe podejście pokazuje również dokładnie te same zmiany (wszystkie zmiany wprowadzone
aq
od czasu pierwotnego podziału naaq
imaster
) jak normalne podejście powyżej, kiedy w końcu scalisz wszystko z powrotemmaster
. Myślę więc, że jego jedyną prawdziwą wadą (poza tym, że jest zbyt skomplikowana i niestandardowa ...: - /) jest to, że jeśli cofniesz n ostatnich zmian,git reset --hard HEAD~<n>
a to minie scalenie, to wersja poniżej przesunie się w dół „zła” gałąź, którą należy naprawić ręcznie (np. za pomocągit reflog
&git reset --hard [sha]
).[Tak więc wcześniej myślałem, że:]
Wystąpił problem z:
ponieważ zmiany pokazane w zatwierdzeniu scalania (np. jeśli patrzysz teraz w Github, Bitbucket lub ulubionej lokalnej przeglądarce historii git) lub później, są zmianami dokonanymi na masterie, co może nie być tym, czego chcesz.
Z drugiej strony
pokazuje zmiany wprowadzone w aq, co prawdopodobnie jest tym, czego chcesz. (A przynajmniej często tego właśnie chcę!) Ale połączenie pokazujące właściwe zmiany jest w niewłaściwej gałęzi!
Jak sobie radzić?!
Pełny proces, kończący się zatwierdzeniem scalania pokazującym zmiany dokonane na aq (jak w drugim scaleniu powyżej), ale z scaleniem wpływającym na gałąź aq, jest:
To: łączy aq w master, przewija do przodu ten sam scalenie w aq, cofa go w master i ponownie przywraca aq!
Czuję, że czegoś mi brakuje - wydaje się, że jest to coś, czego oczywiście chcesz, i coś, co jest trudne do zrobienia.
Również rebase NIE jest równoważne. Traci znaczniki czasu i tożsamość zatwierdzeń wykonanych na aq, co też nie jest tym, czego chcę.
źródło
Scenariusz:
Rozwiązanie
źródło