Here's the git flow I use while working on our latest iOS app Mirror Mirror:
Identify the current branch
git branch MVP master * yennefer
yennefer (wink to The Witcher 3) is the branch that both PL and I will commit to for the next release. I can just make changes on this branch directly, then
git add =>
git commit =>
git push, which usually works just fine.
However sometimes doing this might get me caught in an awkward situation, especially when I'm making a significant set of sweeping changes that touch many different files, variables and callbacks that take some time to finish. Many things could happen before I can push. I might not get to a point where I can git push yet, and the next best thing is
git reset --hard, which would be terrible.
So I would create a new branch off
yennefer instead, git commit every incremental change to this new branch, merge this branch with
yennefer when everything is ready, then git push from
yennefer to the remote.
git checkout -b change-touchable Switched to a new branch 'change-touchable' git branch MVP * change-touchable master yennefer
Commit every incremental change with
git add . and
git commit, but no
git push just yet. So all these changes are only saved locally in this local branch. This local branch
change-touchable will only exist on this local machine. If something happens to the machine or Internet connection, I can still
git checkout to any particular commit in this new branch without losing any work.
When done with all the changes, switch back to branch
git checkout yennefer
yennefer, merge the newly created branch
change-touchable, which now contains all the new commits:
git merge change-touchable
Push to the remote (still on
After all is said and done, delete branch
change-touchable as it's no longer needed
git branch -D change-touchable
This is a much more elegant and fail-proof method than just committing every change to
yennefer as it happens.