EDYTOWAĆ:
Moja odpowiedź poniżej dokumentów sposób scalić master
w aq
, gdzie jeśli zobaczyć szczegóły scaleniu to wymienia zmiany dokonane na aq
przed scaleniem, nie zmienia się namaster
. Uświadomiłem sobie, że prawdopodobnie nie tego chcesz, nawet jeśli tak uważasz!
Właśnie:
git checkout aq
git merge master
jest w porządku.
Tak, to proste scalenie pokaże, że zmiany master
zostały wprowadzone aq
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 wykonane master
(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 na aq
i master
) jak normalne podejście powyżej, kiedy w końcu scalisz wszystko z powrotem master
. 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:
git checkout aq
git merge master
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
git checkout master
git merge aq
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:
git checkout master
git merge aq
git checkout aq
git merge master
git checkout master
git reset --hard HEAD~1
git checkout aq
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ę.