Переходимо в master
і витягуємо останні зміни
git checkout master
git pull
На основі master
створюємо новий тимчасовий бранч
git checkout -b temp_branch
Мерджимо в нього зміни з feature branch
git merge --squash <feature branch name>
--squash
бере всі зміни з бранча і готує до коміту, але не комітить
Можна перевірити, чи всі зміни пішли туди куди потрібно :)
git status
git diff --cached
Потім комітимо зміни. Пишемо нормальний коміт месидж
git commit
Тепер потрібно переписати зміни в feature branch
. Ми переходимо в нього і підміняємо коміти з тимчасового бранча
git checkout <feature branch name>
git reset --hard temp_branch
Тепер пушаємо бранч з опцією force
для того щоб перетерти зміни на сервері. Це небезпечна штука, вона перетирає історію, тому перш ніж виконувати її бажано перевірити що буде пушатися
git push -n
В результаті має бути щось типу
To [email protected]:xmarket/xmarket-provisioning.git
! [rejected] feature_branch -> feature_branch (non-fast-forward)
error: failed to push some refs to '[email protected]:xmarket/xmarket-provisioning.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
Бачимо, що пушається тільки feature_branch
, тому можемо продовжувати
git push -f
І видаляємо тимчасовий бранч
git branch -d temp_branch