Git merge: Already up to date

Рейтинг: 2Ответов: 1Опубликовано: 18.02.2015

Я сделал checkout удаленной ветки, все прошло нормально. Далее делаю обновление git pull, провожу изменения с локальной веткой и делаю commit. Изменения мне не понравились, и я решил сделать некий реверт: git fetch; git merge. Но получил: up-to-date.

Получается, что локальный бранч старше удаленного, и поэтому он не ревертит меня. Подскажите, почему это происходит и какие критерии успешного git merge?

Ответы

▲ 2Принят

Разумеется, локальный старше, но это тут ни при чём, даже если удалённый старше, git pull делает merge между вашими и удалёнными изменениями. Причём он сначала как раз и делает fetch (только добавляет изменения в ваше хранилище с удалённого в отдельную ветку, ваши коммиты сохраняются), а потом merge вашей и удалённой ветки.

Пока вы не сделали git push, можно откатить локальные изменения — git reset с разными ключами в зависимости от того, хотите вы сохранить изменения в файлах или откатить вместе с хранилищем. А если сделали push, то git revert создаст отменяющий коммит, и в удалённом репозитории оба коммита останутся на память.

Критерий хорошего merge - мало конфликтов. Конфликты устраняете в редакторе ища символы <<<<, потом делаете add и commit.

Ещё перед git pull и разными объединениями, перестановками коммитов желательно отложить текущие незакоммиченные изменения в специально предназначенную для этого временную ветку git stash, а потом восстановить git stash pop.