Git ветвь отклоняется после переустановки
Я переустановил ветвь локально, которая уже была нажата.
Git сообщается, что моя ветка и удаленная часть расходятся и что:
"и имеют 109 и 73 разных коммита каждый, соответственно"
Нажатие моей ветки разрешает это - т.е. это следует ожидать после переустановки?
Ответы
Ответ 1
Когда вы пересобираете ветку, вы должны переписать фиксации для любого фиксации, которая выше коммитов в ветке, на которую вы перегружаете. Это связано с тем, что одним из свойств фиксации является его родитель (или родители). Когда вы переустанавливаете, вы меняете родителя самого старого локального коммита на своей ветке - и, таким образом, изменяете хэши фиксации всех ваших локальных коммитов, так как это изменение пузырится через транзакции транзитивно.
Поскольку вы уже подтолкнули ветку, вы должны были объединиться в ветки источника, а не сбрасывать ее. Можно "форсировать" новую ветвь (используя флаг -f
), но нормальный толчок не будет работать, потому что целостность истории ветвей будет нарушена. Если вы сотрудничаете с другими в этой отрасли, принудительное нажатие - плохая идея, так как это приведет к тому, что другие соавторы станут очень смущены, когда их история внезапно не будет соответствовать.
TL; DR - Если вы не сотрудничаете, нажмите ветку, используя push -f. Если вы, reset ветвь в предыдущее состояние и вместо этого объедините в ветки источника.
Ответ 2
Все ваши фиксации изменили идентификаторы, поэтому отклонение не является действительно расходящимся.
Чтобы решить вашу проблему, вам необходимо перезаписать удаленную ветку:
git push -f origin experiment
http://git-scm.com/book/ch3-6.html
Объяснение:
Посмотрите, как на этом изображении C3 не помещается как C3 после rebase, а как C3 '. Это происходит потому, что это не совсем C3, но он имеет все свои изменения кода.
![Rebase]()
На этом другом изображении вы получите представление о том, что наблюдается в случае переадресации, когда используется пульт дистанционного управления, и почему происходит утечка.
![diverge and git push]()
В любом случае, после принудительного нажатия, он скажет вам, что он сделал (принудительное обновление), вы должны быть в порядке в этот момент.
Оформить ссылку вверху и найти "git push -force". Вы увидите более подробное объяснение.
Ответ 3
У меня был успех с ребазом, расходящимся на толчок, выполнив следующее:
git checkout mybranch
git pull
git push origin mybranch
Тяга разрешила расхождение.
ДО тяги
Your branch and 'origin/mybranch' have diverged,
and have 2 and 1 different commit(s) each, respectively.
PULL выход
Слияние сделано рекурсивным. mypath/myfile.py | 12 +++++++++++ - 1 файл изменен, 11 вставок (+), 1 удалений (-)
ПОСЛЕ тяги
Ваша ветка опережает 'origin/mybranch' на 3 коммита.
После толчка
mybranch на 3 опережает ветвь, но в историю коммитов добавлено сообщение о слиянии с открытым запросом, ветвь слияния mybranch of remote в mybranch
Я предполагаю, что это, вероятно, то, что делает силовой толчок, и я не проверял.
Как уже говорили другие, избегайте ребазинга, если у вас уже есть открытый запрос на извлечение. Я привожу этот пример как то, что работает для меня.