Я переустановил ветку локально, которая уже была отправлена.
Git сообщает, что моя ветка и пульт разошлись, и что:
"и имеют 109 и 73 различных коммитов соответственно"
Решит ли это нажатие моей ветки - т.е. следует ли этого ожидать после перезагрузки?
Ответы:
Когда вы перебазируете ветку, вам нужно переписать коммиты для любого коммита, который находится выше коммитов в ветке, на которую вы перебазируете. Это потому, что одним из свойств коммита является его родитель (или родители). Когда вы перебазируете, вы меняете родителя самого старого локального коммита в своей ветке - и, таким образом, меняете хэши коммитов всех ваших локальных коммитов, так как это изменение всплывает через коммиты транзитивно.
Поскольку вы уже отправили ветку, вам следовало бы выполнить слияние в исходной ветке, а не выполнять повторную привязку к ней. Можно «принудительно протолкнуть» вашу новую ветку (используя
-f
флаг), но обычная отправка не сработает, потому что будет нарушена целостность истории веток. Если вы сотрудничаете с другими участниками этой ветки, принудительное продвижение - плохая идея, так как это может привести в замешательство других участников, если их история внезапно не совпадет.TL; DR - Если вы не сотрудничаете, нажмите ветку с помощью push -f. Если да, сбросьте ветвь в предыдущее состояние и вместо этого слейте в исходную ветку.
источник
Все ваши коммиты изменились идентификаторы, так что утечки не действительно расходятся.
Чтобы решить вашу проблему, вам нужно перезаписать удаленную ветку:
http://git-scm.com/book/ch3-6.html
Объяснение:
Посмотрите, как на этом изображении C3 ставится не как C3 после перебазирования, а как C3 '. Это потому, что это не совсем C3, но в нем есть все изменения кода.
На этом другом изображении вы получаете представление о том, что происходит перебазирование, когда задействован пульт, и почему происходит переадресация.
В любом случае, после того, как вы сделаете принудительное нажатие, он сообщит вам, что он выполнил (принудительное обновление), с вами все должно быть в порядке.
Просмотрите ссылку вверху и найдите «git push --force». Вы увидите более подробное объяснение.
источник
Я добился успеха с отклонением rebase для толчка, выполнив следующие действия:
Тяга разрешила расхождение.
ПЕРЕД тянуть
PULL выход
ПОСЛЕ тяги
ПОСЛЕ НАЖАТИЯ
Я предполагаю, что это, вероятно, то, что делает принудительный толчок, и я не проверял.
Как говорили другие, избегайте перебазирования, если у вас уже есть открытый запрос на перенос. Я привожу этот пример как то, что у меня сработало.
источник
Это можно исправить без принудительного толчка, переустановив целевую ветвь в текущую локальную ветвь, переключившись на целевую ветку, а затем переустановив локальную ветку в целевую. Это не расходится, так как коммиты, которые могут отсутствовать, добавляются и их больше не нужно создавать. Пример для более простого объяснения:
Если вы НЕ обновляли свою ветку разработки, то «git checkout develop» && «git rebase feature / doing_stuff» будет работать правильно, поскольку с момента оформления заказа не было добавлено никаких коммитов. Однако, если вы проверили разработку и сняли новую фиксацию, вы увидите это расхождение, если попытаетесь выполнить перебазирование из-за появления новой фиксации. Простое исправление без принудительного нажатия (обычно не очень хорошая идея в командной среде):
Перебазирование с шага 2 переносит недостающую фиксацию в функцию / Making_stuff, поэтому, когда наступает шаг 4, она актуальна и не требует создания новой фиксации для изменения.
Это решение, которое я знаю, работает, потому что я только что столкнулся с этим и выполнил описанные выше шаги, чтобы успешно протолкнуть разработку без принуждения. Я работаю в команде из более чем 50 разработчиков, поэтому мне запрещено принудительно запускать что-либо, кроме моих собственных веток тестирования, поэтому мне пришлось найти решение.
источник