git rebase и git push: не перемотка вперед, зачем использовать?



У меня есть филиал, который должен быть доступен для других участников и которые должны постоянно оставаться в курсе с мастером.



к сожалению, каждый раз, когда я делаю "git rebase", а затем пытаюсь нажать, это приводит к "не-быстрой перемотке вперед" и аборту нажатия. Единственный способ надавить здесь-это использовать ... силу. Означает ли это, что я должен использовать "git merge" вместо перезагрузки, если моя ветка стала общедоступной, а другие работают над ней?

588   2  

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

    Ничего не найдено.