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, вам тоже придется его исправить... То же самое, если другие разработчики уже вытащили его.