git rebase и git push: не перемотка вперед, зачем использовать?
У меня есть филиал, который должен быть доступен для других участников и которые должны постоянно оставаться в курсе с мастером.
к сожалению, каждый раз, когда я делаю "git rebase", а затем пытаюсь нажать, это приводит к "не-быстрой перемотке вперед" и аборту нажатия. Единственный способ надавить здесь-это использовать ... силу. Означает ли это, что я должен использовать "git merge" вместо перезагрузки, если моя ветка стала общедоступной, а другие работают над ней?
2 ответов:
несколько заметок о том, как работает git (нетехнический):
когда вы переустанавливаете, git берет коммиты, о которых идет речь, и "возобновляет" их поверх чистой истории. Это делается для того, чтобы история не показывала:
Description: tree -> mywork -> merge -> mywork -> merge -> mywork -> merge Commit SHA1: aaaa -> bbbb -> cccc -> dddd -> eeee -> ffff -> ggggпосле перебазирования, это может выглядеть так (или похожие):
Description: tree -> rebase Commit SHA1: aaaa -> hhhhпроблема в том, что новая фиксация, которую вы пытаетесь вытолкнуть, есть не потомок фиксации на кончике ветки вы находитесь толкает к себе.
теперь вы знаете, что та же информация находится в коммитах, но git несет ответственность, а не просто перезаписывает эти коммиты (bbbb-gggg в приведенном выше примере).
Модель Общего РЕПО
если вы используете общий репозиторий, то такие вещи могут стать очень запутанными. Позвольте мне объяснить почему. Скажем, другой разработчик спустил ветку, и у них есть коммиты
нет, rebase является совершенно законным с публичными репозиториями и может даже быть желательно, чтобы сохранить историю свободно. Просто имейте в виду, что вы не должны использовать rebase, чтобы переписать историю удаленно опубликованных коммитов. То есть rebase может применяться только к вашим собственным локальным коммитам, которые вы никогда не публиковали. Вы используете rebase, чтобы разместить свои коммиты поверх них при извлечении, а затем, возможно, настроить их там. Еще одна причина, по которой вы можете получить такое сообщение, заключается в том, что ветка, которую вы нажимаете был обновлен, и вам нужно синхронизировать -- fetch и перебазировать ваши коммиты поверх того, что вы выбрали.
Comments