2013-06-03 2 views
4

У меня есть чертовски время, организовывающее мою первую крупную ветку и сливающуюся. Что случилось, у меня есть главная ветвь, называемая «main», и новая ветвь, созданная с именем «branch2» с «main». В течение нескольких недель я сделал несколько изменений в 'branch2' в нескольких файлах и создал несколько новых файлов. За это время я также внес несколько незначительных изменений в «основное». Когда пришло время слияния, я проверил «главное» и позвонил git merge branch2. Неудивительно, что он сказал мне, что у меня были конфликты для разрешения в одном из моих файлов. Поэтому я использовал git mergetool, чтобы открыть meld, мой различный зритель, чтобы решить разногласия. После согласования этих различий я снова вызвал git merge branch2, и слияние произошло успешно.Изменения в основной ветке, не появляющиеся после слияния

Проблема в том, что она фактически не сливалась успешно. Некоторые элементы слились должным образом, но некоторые изменения в «branch2» никогда не переходили, и я понятия не имею, почему. Я попробовал позвонить git merge branch2, но теперь он просто говорит «все в актуальном состоянии». Это явно неверно, потому что если вы git checkout branch2, то вы можете увидеть изменения, которые не находятся в «главном».

Любая идея, что могло случиться? Почему git объявляет «все в актуальном состоянии», когда он не слился правильно? Есть ли способ заставить git снова попробовать слияние?

+0

Обычно после разрешения конфликтов с 'git mergetool', я делаю статус git, чтобы проверить, что все хорошо. Затем я компилирую исходный код, запускаю тесты и т. Д., Чтобы убедиться, что все в порядке, а затем просто зафиксировать. Вы сделали этот шаг? Я не сливаюсь снова после разрешения конфликта, но не уверен, что это имеет какой-то эффект, если таковой имеется. Кроме того, я чаще всего объединяю свою ветку функций чаще. –

+0

Мне бы хотелось объединить свою ветку функций чаще, но цель ветки заключалась в том, чтобы оставить новый код вне основного кода, пока он не будет полностью готов. Мне не нужен полупеченный код в производственной версии (это веб-сайт, так что вещи в основной отрасли видны внешним миром). –

+0

Похоже, что вы допустили некоторые ошибки при выполнении слияния, вы должны, вероятно, сбросить настройки до слияния и слияния снова. –

ответ

4

Вы сделали злое слияние. Запустите gitk --all, чтобы узнать, что происходит. Вы поступили неправильно, когда вы позвонили git merge во второй раз. Когда вы разрешили свои конфликты, вам нужно запустить git commit, а не объединять.

Но git теперь думает, что ваш branch2 слит в main. Поэтому вам нужно удалить это слияние. Используйте gitk, чтобы получить sha fo для последнего фиксации до слияния и запустите git reset --hard **SHA** в основной ветке, чтобы вернуть его обратно на этот этап. Затем повторите попытку.

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