2016-02-19 4 views
1

Новое в git. Использование git предприятия на Mac.git merge origin master "Уже обновлено"

Так что я работал в филиале IntelliJ IDEA, назовем его «foo». Итак, мастер-> foo.

Был доволен моими изменениями, поэтому я нажал/отдал их на дистанционное репо. В этот момент я был готов начать процесс, чтобы объединить изменения в мастер. Но сначала я хотел объединить любые изменения с мастером в свою ветку и протестировать их.

Итак, с «foo» все еще выписано, я запустил «git merge origin/master».

Это привело к изменениям, которые я ожидал. Я разрешил любые конфликты. На этом этапе я нашел что-то, что я хотел изменить, прежде чем выполнять слияние. Итак, в IntelliJ я перешел в окно «Контроль версий» на вкладке «Локальные изменения». Щелкните правой кнопкой мыши и выберите «Отменить».

Это вернуло слияние, как ожидалось. Я внес свои изменения и снова запустил «git merge origin/master». Но теперь он говорит «Уже обновлен».

Помощь!

+0

Есть ли причина, по которой вы хотели «вернуть» слияние? Вы можете так же легко внести свои изменения и зафиксировать его поверх слияния. –

ответ

2

Слияние состоит из двух частей - смены файлов в текущем снимке и фиксации с двумя родителями, которые сообщают git, что слияние выполнено. Когда вы делаете git revert при слиянии, он отменяет первое, но не последнее. Что касается git, вы уже слились в origin/master. Единственный способ «слить» после возврата слияния - снова вызвать git revert, передав ему фиксацию, полученную предыдущим git revert; вы должны «вернуть реверс».

+0

Создает ли 'git revert' новый коммит, который« отменяет »изменения? –

+0

@ Code-Apprentice - да, 'git revert' всегда создает новую фиксацию. –

+0

Конечно, здесь есть основное предположение, что команда «Revert» в IntelliJ IDE переводится в 'git revert'. По моему опыту, такой перевод между элементом меню GUI и командной строкой иногда не является буквальным. В частности, команда «Revert» в Android Studio эквивалентна 'git reset --hard HEAD' из того, что я видел. Однако это может различаться в IntelliJ. –

1

Я предлагаю вам начать ветку с фиксацией слияния и внести туда свои изменения. Затем вы можете сделать новую фиксацию с изменениями. Я не вижу причин «возвращаться».

Если вы действительно хотите отменить слияние перед внесением изменений, вам необходимо использовать git reset из командной строки или «Сброс для прослушивания ...» в окне управления версиями IntelliJ IDEA. Затем вы можете внести свои изменения, но вам также придется снова выполнить слияние вместе с разрешением конфликтов. Это похоже на гораздо большую работу, чем это стоит.

+0

'git reset 'будет только отменять внесенные изменения, если они уже были совершены - если он должен был разрешить конфликт, это не произойдет автоматически. 'git reset', когда выполняется без опции --hard, изменяются только нестатические изменения, что означает, что ему не нужно снова выполнять слияние, если он не совершил https://git-scm.com/docs/ git-reset –

+0

@EddiePrislac Правильно ... Я забыл включить разницу между '--hard' и' --soft', а остальное. Я почти всегда использую '--hard', поэтому я часто забываю, что доступны другие варианты. –

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