git-rebase
strona man wspomina -X<option>
mogą być przekazywane git-merge
. Kiedy / jak dokładnie?
Chciałbym zmienić bazę, stosując łatki ze strategią rekurencyjną i ich opcją (zastosuj dowolne patyki, zamiast pomijać całe sprzeczne zatwierdzenia). Nie chcę scalać, chcę, aby historia była linearna.
Próbowałem:
git rebase -Xtheirs
i
git rebase -s 'recursive -Xtheirs'
ale git odrzuca -X
w obu przypadkach.
git rebase -Xtheirs
działa w najnowszych wersjach, z wyjątkiem konfliktów drzew, które muszą być rozwiązywane ręcznie. Po rozwiązaniu tych konfliktów musisz biec git rebase -Xtheirs --continue
(z -X
powtórzeniami).
git
git-rebase
Kornel
źródło
źródło
git rebase --interactive
również z . Zobacz moją [zaktualizowaną odpowiedź poniżej ( stackoverflow.com/a/2945367/6309 ).Odpowiedzi:
Możesz tego użyć z Git 1.7.3 lub nowszymi wersjami.
(co jest skrótem
git rebase --strategy recursive --strategy-option theirs ${branch}
od podanym w dokumentacji )Z Git v1.7.3 Release Notes:
git rebase --strategy <s>
nauczył się opcji--strategy-option
/-X
, aby przekazać dodatkowe opcje, które są zrozumiałe dla wybranej strategii łączenia.Uwaga: „nasze” i „ich” oznaczają przeciwieństwo tego, co robią podczas prostego scalania. Innymi słowy, „ich” faworyzuje zatwierdzenia w bieżącej gałęzi.
źródło
ours
itheirs
wydaje się być przeciwieństwem tego, czego się spodziewam. Muszę użyćtheirs
do faworyzowania mojej obecnej gałęzi.-X
implikacji-s recursive
, więc możesz teraz użyć tylkogit rebase ${branch} -X theirs
. (źródło git-scm.com/docs/git-rebase#git-rebase--Xltstrategy-optiongt )Dotyczy to strategii scalania, które mają własny zestaw opcji
powinno działać, chociaż ta poprawka wspomina (luty 2010):
Więc jeśli nadal nie działa, jest teraz przedmiotem debaty!(obsługiwane w ostatnim git)
Aktualizacja z commit db2b3b820e2b28da268cc88adff076b396392dfe (lipiec 2013, git 1.8.4+),
Oznacza to, że
-X
strategia i strategia działają teraz zarówno z interaktywnym rebase, jak i zwykłym rebase.źródło
Jak powiedział iCrazy , ta funkcja jest dostępna tylko dla git 1.7.3 i nowszych . Tak więc dla biednych dusz (takich jak ja), które wciąż używają 1.7.1, przedstawiam rozwiązanie, które zrobiłem sam:
git-rebase-ich
Jest to bardzo dobrze dopracowany (a przez to długi) skrypt, przeznaczony do użytku produkcyjnego: opcje interfejsu użytkownika, obsługuje wiele plików, sprawdza, czy plik faktycznie zawiera znaczniki konfliktów itp., Ale „rdzeń” można podsumować w 2 liniach:
A oto pełny scenariusz:
źródło
git rebase --strategy="recursive --theirs" master