Есть удаленный репозиторий
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 ветке.
Заранее спасибо.
Ответ
Это так не работает.
Проблема в том, что коммит, семантически, это набор изменений, а не состояние.
Поэтому чтобы отправить последнее состояние, нужно отправить набор изменений от начального (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 выглядят, как отдельные коммиты. И для этого не нужно никакое шаманство с перезаписью коммитов и пушем "силой".
Комментариев нет:
Отправить комментарий