惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
罗磊的独立博客
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
V
V2EX
美团技术团队
阮一峰的网络日志
阮一峰的网络日志
酷 壳 – CoolShell
酷 壳 – CoolShell
月光博客
月光博客
量子位
MyScale Blog
MyScale Blog
G
Google Developers Blog
M
MIT News - Artificial intelligence
L
LangChain Blog
Microsoft Azure Blog
Microsoft Azure Blog
Recent Announcements
Recent Announcements
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
有赞技术团队
有赞技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
B
Blog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Most beginners misuse these Git branch commands: main, ch...
Cristian Jonhson Alvarez · 2026-06-13 · via DEV Community

Why these Git commands confuse so many beginners

A lot of developers use these commands from memory:

  • git branch -M main
  • git checkout -b feature/inicial
  • git switch -c feature/inicial
  • git push -u origin feature/inicial

The problem?

Most people can type them.
Few people can clearly explain why they use them.

And that matters.

Because if you do not understand what these commands actually do, you will eventually mess up your branch flow, push to the wrong place, or confuse yourself when working across multiple repos.

Let’s fix that.


The real meaning of git branch -M main

This command:

git branch -M main

renames your current branch to main.

The important part is -M.

It is basically the forced version of branch rename:

  • -m → rename branch
  • -M → rename branch and force it if needed

So when you run:

git branch -M main

You are not “creating GitHub main magic.”
You are simply saying:

Rename whatever branch I am currently on to main.

What about master?

This command works the same way:

git branch -M master

The only difference is the target name.

Historically, many repositories used master.
Today, most modern repositories default to main.

Better option for brand new repos

If the repository is brand new, this is cleaner:

git init -b main

That way, you start with main immediately and avoid renaming later.


git checkout -b vs git switch -c: same result, different philosophy

These two commands are often used for the exact same outcome.

Classic Git style

git checkout -b feature/inicial

Modern Git style

git switch -c feature/inicial

Both commands:

  1. create a new branch
  2. move you to that branch immediately

So why do we have both?

Because checkout does too much

git checkout is one of those old Git commands that can do many unrelated things:

  • switch branches
  • restore files
  • move around history

That flexibility is powerful, but also confusing.

git switch was introduced to make the intent much clearer.

When you write:

git switch -c feature/inicial

it is obvious that you are doing branch work.

That is why many teams now prefer switch for teaching and day-to-day use.

Which one should you use?

If you are working on a modern Git version, prefer:

git switch -c feature/inicial

It is clearer, easier to teach, and easier to read.


Why git push -u origin feature/inicial is more important than people think

Creating a local branch is only half the job.

Until you push it, GitHub does not know it exists.

That is where this command comes in:

git push -u origin feature/inicial

It does two things at once:

1) Pushes the branch to the remote

It sends your local feature/inicial branch to the remote called origin.

2) Sets upstream tracking

This is the part beginners usually skip over.

The -u means Git remembers the relationship between:

  • your local branch
  • the remote branch it tracks

So after this first push, you can usually just run:

git push

and later:

git pull

without typing the full branch name again.

That is why -u is such a useful habit.


The workflow most beginners actually need

If you want a simple, clean branch workflow, use this:

git init -b main
git add .
git commit -m "Initial commit"
git switch -c feature/inicial
git push -u origin feature/inicial

If you already initialized the repository and need to rename the current branch first:

git init
git branch -M main
git add .
git commit -m "Initial commit"
git switch -c feature/inicial
git push -u origin feature/inicial

That is enough for a huge number of personal projects and team workflows.


Can you do this with gh?

Partly, yes.

GitHub CLI is excellent for GitHub-related actions, but it does not replace core Git branch commands in the normal day-to-day flow.

What gh does well

It is great for creating the remote repository from the terminal:

gh repo create my-project --public --source=. --remote=origin --push

That command can:

  • create the GitHub repo
  • connect it as origin
  • push your local code

What you should still do with Git

For regular local branch creation, Git is still the standard:

git switch -c feature/inicial
git push -u origin feature/inicial

Where gh becomes really useful again

Once the branch exists, gh is excellent for pull requests:

gh pr create --base main --head feature/inicial --title "Create initial feature branch" --body "This PR introduces the initial feature branch."

And if your team uses GitHub issues, there is a very useful workflow around issue-based branch creation.


The mistake many people make

They memorize the command.
They never learn the intent.

So they end up asking things like:

  • “Why didn’t my branch appear on GitHub?”
  • “Why does git push say there is no upstream branch?”
  • “Why do I have master locally and main remotely?”

The answer is almost always the same:

They followed commands mechanically instead of understanding the branch lifecycle.

That lifecycle is simple:

create repo → define main branch → create feature branch → push and track upstream → open PR

Once you see that flow, the commands stop feeling random.


Final takeaway

If you only keep one mental model from this article, keep this one:

  • git branch -M main → rename current branch to main
  • git checkout -b name → create branch and switch to it
  • git switch -c name → same goal, cleaner modern syntax
  • git push -u origin name → publish the branch and set upstream tracking
  • gh → great for repo creation and PR workflows, not a full replacement for Git branch work

Git is easier when you stop memorizing commands and start understanding the sequence.

That is when branching becomes predictable instead of stressful.


Quick command summary

git init -b main
git switch -c feature/inicial
git push -u origin feature/inicial

If the repo already exists and you need to rename the current branch:

git branch -M main

If you want to create the GitHub repository from the terminal:

gh repo create my-project --public --source=. --remote=origin --push


What do you prefer in your daily workflow: git checkout -b or git switch -c?

If you are teaching Git to juniors, standardizing team workflows, or just trying to stop fighting branch confusion every week, start by simplifying the mental model—not just the commands.