У нас есть this problem, который может быть поднят на рабочий процесс merge
, поэтому мы рассмотрим вместо этого рабочий процесс rebase
.Git rebase удаленной ветке с сохраненной историей
Одна из проблем заключается в том, что rebase
на удаленных репозиториях переписывает историю. Но я думаю, что это может быть исправлено
- Марку
tag
(могут быть именаbranch_rebaseXXXXXXXX
гдеXXXXXXXX
отметка времени) на ветке вы собираетесь перебазироваться - раздвинуть
tag
- Применить
rebase
- Push
Git может помешать вам выполнить rebase
на пульте дистанционного управления, даже если вы следовали вышеприведенному сохранить историю. Вместо git push --force
хака, мы можем сделать
- Создать новую ветку
branch_new
на вершинеbranch
- Марк тег, как описано выше
- Rebase новый филиал
- Нажмите новый филиал и тег
- Удалить старый местный и удаленный
branch
- Переименуйте
branch_new
вbranch
- Нажмите на изменение отраслевых имен
При применении этого подхода и использует только rebase
не merge
строго от начала, хотя в результате совершения истории не будет линейным, но так как там не будет никаких слияний, это будет эффективно формировать древовидный граф, где каждый листовой узел является либо концом активной ветви, либо помечен тегом. Лично я бы назвал эти метки «надгробными камнями».
Поскольку вышеупомянутый подход еще не использовался на практике, какими будут плюсы и минусы этого подхода? Особенно, что бы произошло, если кто-то проверил ветку, работая над ней, а затем другой парень отметил надгробную плиту на этой ветке?
Похоже, что все, что вы сделали, смутило проверку '--force'. Чистый эффект - это то, что важно, и оно идентично силе нажатия на пересылку, поэтому имеет тот же эффект на всех, кто вытаскивает репозиторий. – user3710044
Да, это может быть то же самое, что и «-force», но дело здесь в том, что, помечая ветвь rebasing, оно позволяет избежать частичной истории уничтожения в публичном репозитории. Это важно, так как переустановленные коммиты будут отличаться от исходных, если есть какие-либо конфликты для решения. ИМХО, что 'rebase' позволяет удалить оригинальные коммиты, является ошибкой дизайна. –
Кроме того, все же стоит использовать обходной путь. 'git push -force' может быть ужасным, если вы только что забыли использовать' git tag'. Таким образом, следуя вышеприведенным шагам, хотя это сложнее, эффективно снижает риск совершения неправильной вещи. –