GIT: как раздавить несколько коммитов, которые были перенесены на удаленное репо?
У меня есть странная настройка с Git. В основном я:
[client 1] <---> [remote repo] ----> [client 2]
[Клиент 1] - это, по сути, местное репо, с которым я работаю, потому что я не могу скомпилировать/построить проект на своей локальной машине.
[Клиент 2] - это удаленный сервер для создания.
В середине у меня есть другое репо [remote repo], в основном для синхронизации с центральным репо cvs в моей компании, а также синхронизация между моими [клиентом 1] и [клиентом 2].
Поскольку все компиляция/построение выполняется на [client 2], у меня есть много тривиальных коммитов на [клиент 1] только для исправления ошибок компиляции или построения.
Итак, к тому времени, когда я выясню, что в последнем коммите есть ошибки, это уже слишком поздно, потому что фиксация уже была нажата и вытащена из удаленного репо.
Как я могу скворовать эти (много) тривиальные коммиты в один?
Спасибо.
Ответы
Ответ 1
Прежде всего, избегайте раздавливания и, в общем, переписывания истории, если вам абсолютно не нужно. Наличие "тривиальных" коммитов не является основанием для сквош толкаемых коммитов. Если они могут остаться, пусть они остаются. И переписывание истории не является простым в cvs вообще, так что, поскольку эти коммиты пробились бы в репозиторий cvs, вы, вероятно, должны жить с ним.
Для удаленного репо git, если вы хотите продолжить, я предполагаю, что вы знаете, что выкалываете коммиты на своем локальном репо (git rebase -i
является простым). После сквоша нажмите кнопку -f
- нажатие на кнопку.
Ответ 2
Вы можете раздавить коммиты с помощью git rebase -i
или git merge --squash
, см. Squash my последний X фиксируется вместе, используя Git
Но поскольку вы уже опубликовали их в другом репозитории, вы должны исправить его на других. Довольно громоздко, но git push --force
- это команда, в которой вы нуждаетесь.
Не рекомендуется, однако: если удаленное репо уже синхронизировано с CVS, вам тоже придется его исправить... То же самое, если другие разработчики уже вытащили его.