Basically, I use travis-ci to locally build an entire site into /dist folder of master branch (but not upload to remote repo) and then deploy to gh-pages branch.
travis-ci supports pushing local-dir to target-branch: https://docs.travis-ci.com/user/deployment/pages/
My site consists of several independent sections, so I expect in future that I only build one section if changed and incrementally deploy to gh-pages without affecting other sections.
For example, /dist has two sections /dist/section_one and /dist/sections_two.
On master branch, I make modifications to /src/section_one, which will be built into /dist/section_one. Then I can push it to /section_one on gh-pages branch. Is this practical?