Tired of typing the same git commands like it is some medieval ritual? This guide shows how to create a new GitLab branch from Bash and push it to the remote like a civilized human. It is aimed at developers who want automation, consistency, and fewer awkward merge surprises. We cover authentication checks, creating a local branch, pushing with upstream tracking, verifying the remote, and a tiny Bash script to automate the boring parts.
Prepare credentials and authentication
First things first check that you can talk to the remote without screaming. Use SSH keys or HTTPS credentials. If your project uses a personal access token store it in an environment variable such as GITLAB_TOKEN and do not paste it into logs or chat threads that make HR nervous. If you use SSH make sure your key is added to the agent and registered in the GitLab project settings.
Quick checks before you start
- Confirm you can fetch from the repo with
git fetch
- Confirm your remote is set as
origin
or adjust commands to match - Make sure you do not have uncommitted work with
git status --porcelain
Create a descriptive local branch
Pick a branch name that will not make reviewers cry. Many teams use a prefix like feature
or fix
followed by a short slug. Example command to start a branch in a new task:
git checkout -b feature/my-new-feature
This creates a local branch and switches you there so you can do your work without wrecking the mainline.
Push the branch and set upstream
When the branch is ready to live on GitLab push it and set the upstream so future git push
calls know where to go. Use this command:
git push --set-upstream origin feature/my-new-feature
That creates the remote branch and links your local branch to it. Later you can just run plain git push
and git will understand what you mean.
Verify the branch on the remote
Do a quick check to avoid surprises. Run git fetch
and then list remote branches with git branch -r
. You can also peek at the GitLab web UI if you enjoy clicking around. These checks stop you from opening a merge request against a branch that does not exist or pushing to a wrong remote.
Automate with a small Bash script
Wrap the flow into a tiny script and your future self will thank you. The script below validates a simple branch naming pattern checks for uncommitted changes and runs the push. It is a basic automation step for any devops friendly workflow or scripting toolbox.
#!/usr/bin/env bash
set -euo pipefail
branch="$1"
if [ -z "$branch" ]; then
echo "Usage $0 branch-name"
exit 1
fi
if [ -n "$(git status --porcelain)" ]; then
echo "You have uncommitted changes. Stash or commit them first"
exit 1
fi
if [[ ! "$branch" =~ ^(feature|fix|hotfix)/[a-z0-9._-]+$ ]]; then
echo "Branch name must follow pattern feature or fix or hotfix slash short-slug"
exit 1
fi
git checkout -b "$branch"
git push --set-upstream origin "$branch"
Troubleshooting and tips
- If push fails check remote permissions and whether your SSH key or token is valid
- For automation in CI use the project deploy token or CI job token with least privilege
- Use branch names that team CI and merge rules can parse to avoid surprises
This is a practical workflow that keeps your git branching tidy and your reviews less painful. Use the script as a starting point and extend it if your workflow needs extra checks for issue keys or ticket IDs. Now go create branches responsibly and spare the rest of the team a confusing commit history.