2010-08-09 22 views
17

Zrobiłem git fetch, a następnie git pull --rebase. Próbuje scalić zmiany z odległego oddziału do mojego lokalnego oddziału. I są pewne konflikty scalające. Zrobiłem więc git reset --hard.Jak mogę git pull -rebase, ale biorąc wszystkie zdalne zmiany?

Moje pytanie brzmi: czy mogę poprosić git pull o zdalne zmiany w przypadku konfliktu?

+0

Po mogą pobierać i przebazować ręcznie (na przykład 'fetch' git i 'git przebazować -X ich pochodzenia/foo') – Whymarrh

Odpowiedz

24

myślę, co chcesz to:

git pull --rebase -s recursive -X ours 

Ale to nie działa (używam 1.7.0.4), choć podręcznika mówi, że powinno. Zgaduję, że jest to spowodowane problemem mentioned here.

Zamiast tego można użyć:

git pull -s recursive -X theirs 

To działa zgodnie z oczekiwaniami, ale dostaniesz seryjnej zamiast rebase.

Również - należy zwrócić uwagę na "nasz", a nie "ich", gdy używa się --rebase. Z git-rebase strona podręcznika:

[CLIP] ... operacja polegająca na ponownym scaleniu działa poprzez odtworzenie każdego zatwierdzenia z działającego oddziału na górze gałęzi. Z tego powodu, gdy dochodzi do konfliktu, strona zgłaszana jako nasza jest jak dotychczas oparta na serii, począwszy od upstream, a ich gałęzie pracujące. Innymi słowy, boki są zamieniane. ... [CLIP]

+0

Jeśli' git wyciągnąć --rebase przed devel', czy "rekursywna" strategia nie byłaby zbyteczna? Alternatywą byłaby strategia scalania ośmiornicy, jeśli dobrze rozumiem strony podręcznika, ale jest to wymagane tylko wtedy, gdy połączono więcej niż 2 gałęzie. W moim przypadku tylko dwie ('upstream/devel' i' /devel', '' są moją kopią roboczą 'fork/devel' zsynchronizowaną z Githubem). W związku z tym użyłbym 'git pull --rebase --strategy-option theirs' jeśli nic nie przemawia przeciwko niemu? – CoDEmanX