2010-08-09 2 views
17

Я сделал git fetch, а затем git pull --rebase. Он пытается слить изменения с удаленной ветви на мою локальную ветвь. И есть некоторые конфликты слияния. Поэтому я сделал git reset --hard.Как я могу потянуть -rebase, но все удаленные изменения?

Мой вопрос: возможно ли, чтобы я попросил git pull, чтобы удалить удаленное изменение всякий раз, когда есть конфликт?

+0

После можно также получать, а затем перебазироваться вручную (например, 'мерзавец fetch' и' мерзавец перебазироваться -X ихнего происхождения/Foo') – Whymarrh

ответ

24

Я думаю, что вы хотите это:

git pull --rebase -s recursive -X ours 

Но это не работает (я использую 1.7.0.4), даже несмотря на то, говорит, что страница руководства должен. Я предполагаю, что это связано с выпуском mentioned here.

Вместо этого, вы можете использовать:

git pull -s recursive -X theirs 

Он работает, как ожидалось, но вы получите слияние вместо перебазироваться.

Также - обратите внимание на «наш», а не на «их» при использовании --rebase. Из справочной страницы git-rebase:

[CLIP] ... сливание с перестановкой работает путем повторного воспроизведения каждого фиксации из рабочей ветви сверху верхней ветви. Из-за этого, когда происходит конфликт слиянием, сторона, о которой сообщается, как наша, является так называемой переустановленной серией, начиная с восходящего потока, а их рабочая ветвь. Другими словами, стороны меняются местами. ... [CLIP]

+0

Если я 'мерзавец тянуть --rebase вверх devel', не будет ли излишняя «рекурсивная» стратегия? Альтернативой будет стратегия слияния осьминогов, если я правильно понимаю права, но это требуется только в случае объединения более двух ветвей. В моем случае есть только два ('upstream/devel' и' /devel', '' - моя рабочая копия 'fork/devel', синхронизированная на Github). Таким образом, я бы использовал 'git pull -rebase -strategy-option theirs', если ничего не говорит против него? – CoDEmanX