#git #git_rebase
Есть удаленный репозиторий
x1->x2->x3
\master
Я сделал его форк и локально новую ветку
/master
x1->x2->x3
\y1->y2->y3
\local-develop
Как мне теперь сделать push-request с последним коммитом так, что бы не были видно
всей истории коммитов?
/master
x1->x2->x3->y3
\y1->y2->y3
\local-develop
Цель в том, что бы добавить результат работы в удаленный репозиторий в отдельную
ветку, при этом не захламляя удаленный репозиторий лишними кометами с историей разработки.
Я пробовал сделать так
git checkout local-develop
git rebase -i master
*squash all commit*
Но получается что они сбиваются в одни в local-develop ветке.
Заранее спасибо.
Ответы
Ответ 1
Это так не работает. Проблема в том, что коммит, семантически, это набор изменений, а не состояние. Поэтому чтобы отправить последнее состояние, нужно отправить набор изменений от начального (x3, не включительно) до конечного (y3). И раз вы хотите представить этот набор одним коммитом, то вам придётся сделать один коммит, содержащий в себе изменения y1..y3. С помощью rebase -i вы это и сделали. Если при этом вы не хотите терять исходные коммиты, можно "сплющивание" (squash) сделать в отдельной ветке (просто перед началом ребейза сделав git checkout -b local-develop-squashed, находясь в ветке local-develop). После ребейза получится такое состояние: x1->x2->x3-\ {master} | |->y1->y2->y3 {local-develop} | \->z1 {local-develop-squashed} В ветке local-develop-squashed по сравнению с master выходит один красивый коммит. Из этой ветки и нужно делать pull request. У этого, конечно, есть проблемы. Если вы захотите этот pull request доделать, вам придётся делать push --force каждый раз, что в общем случае очень опасно. Поэтому "на посмотреть" можно загрузить и исходную историю из кучи коммитов, и только когда дадут "добро", сделать из кучи коммитов один "прямо на месте" и сделать один раз push --force. А ещё некоторые пользуются при мердже PR опцией --no-ff, а историю смотрят с помощью git log --first-parent master, в результате чего детальная история фича-веток не показывается, а PR выглядят, как отдельные коммиты. И для этого не нужно никакое шаманство с перезаписью коммитов и пушем "силой".
Комментариев нет:
Отправить комментарий