2013-06-04 6 views
0

В настоящее время я нахожусь на ветке foo, и я хочу объединить изменения с ветки bar, которая, по-видимому, считается частью истории foo, из-за причин, которые сложно объяснить.Сила слияния в ветке в git

К сожалению, следствием является то, что если я бегу

git checkout foo 
git merge bar 

я буду получать сообщения Already up-to-date хотя есть изменения в отрасли bar, что я хочу, чтобы попасть в отделение foo.

Я рассмотрел два возможных решения.

Одна из возможностей - просто проверить bar, скопировать ее в другое место, проверить foo, а затем вручную выполнить слияние. Это будет работать, но я бы предпочел менее ручное решение, если таковое существует.

Другая возможность - сделать обратное слияние, то есть слить foo в bar. К сожалению, когда я попробовал это, автомат git точно стирает эти изменения в bar, которые я хочу сохранить и заменить их изменениями от foo, что нежелательно.

Как я могу заставить мерзавец притворяться bar в будущем и foo в прошлом, чтобы позволить слияние bar в foo?

+0

Являются ли обе или фоновые удаленные ветви или локальные? –

+0

@ AzizShaikh, оба местные. – merlin2011

+0

Не могли бы вы нарисовать какое-нибудь искусство ASCII из ветвей, чтобы объяснить, почему требование Гит ('уже обновлено') не так? –

ответ

0

Не умный разрешение, но должно работать:

Сначала запустите

git diff -p foo bar <files_you_want_to_merge> > patch 

для создания файла путь и редактировать его в случае необходимости (например, удалить те новее в foo чем bar).

Затем запустите

git checkout foo 
git apply patch 

будет 'псевдо-слияние' bar к foo.

Смежные вопросы