I was accidentally updating other branches when pushing my feature branch, and didn't realise why.
Ever pushed to the wrong branch by mistake? what happens when you
git push? Is your expectation that your local branch is pushed to the remote? This might not be the case:
What happens depends on your
push.default configuration setting! List push default strategy that is in use
$ git config push.default for your project and
$ git config --global push.default for the fallback. To set the value, append it to the command.
There are 5 options, my understanding is that:
simplepushes the current branch to the remote branch with the same name, but doesn't create the branch if it doesn't already exist. This is the default if you've recently updated git.
currentworks like simple but creates the remote branch. Handy unless you're accidentally pushing to the wrong remote.
upstreamworks like current, but pushes to the tracking branch which might not have the same name. To illustrate this, you can set the tracking branch to a different destination, for example:
git branch --set-upstream-to=origin/my-experiment CI-3911-husky
There are two more strategies to be aware of:
nothingdoes not push anything. I don't know when you'd want to use this.
matchingpushes ALL branches that exist remotely!
Realising that you're pushing dev/stage/any other branch with changes when pushing your feature branch, and having to reset them, is not a fun day at the office. This gets more complex when using multiple remotes! I would avoid this strategy.
Tracking branch vs remote branch
The distinction is that all remote branches are potentially tracking branches, but the tracking branch for your local branch does not have to be on a remote.
You can track local master for example for your feature work.
Note that you can find out your tracking branch through
git status, in general it should contain the remote to avoid unintended consequences:
$ git status On branch CI-3911-husky Your branch is up to date with 'origin/CI-3911-husky'.
Finally a tip: please specify a remote after
git push in your
npm / composer scripts, so that if the remote is set incorrectly for reasons your team is pushing to the right place.
Finally, Finally 111 latest: if you're not sure about any git command, append
--dry-run to test it non-destructively. And if you get stuck, I found the Flight Rules helpful.
Feel free to comment with any corrections or knowledge, everyone is learning :D