Using git and GitHub


Beginner workflow (Git + GitHub + PowerShell + gh)

Summary: the beginner-friendly stance

  • No rebase
  • git sync when starting/resuming work and after PR merges
  • Commit and push checkpoints as you go
  • Merge to main via PR + squash merge using gh (CLI)

0) One rule

  • Keep main clean.
  • Do your work on a branch.
  • Merge via PR (squash) so main stays simple and “green”.

0.1) Once per machine.

Install git & GitHub CLI and authenticate

winget install --id Git.Git -e --source winget
winget install --id GitHub.cli -e
gh auth login
git config --global alias.sync "fetch --prune"
git config --global fetch.prune true
git config --global pull.ff only
git config --global alias.lg "log --oneline --decorate --graph -20"
git config --global alias.br "branch --show-current"

A) Sync local repo (when starting/resuming work or when you have changes from GitHub)

git switch main
git sync
git merge --ff-only origin/main

If the last line fails, stop and inspect:

git status
git lg

(You should not “force it”. Decide intentionally.)


B) Start a coding branch (even if you already edited files)

$branch="fix/readme-typos"

git status
git switch -c $branch

If the branch already exists:

git switch $branch

C) Checkpoints while coding (save + upload)

1st checkpoint (first push sets upstream)

git status
git add -A
git commit
git push -u origin $branch

Next checkpoints

git add -A
git commit
git push

If git push is rejected (rare for you)

This means “remote has commits you don’t have”.

Beginner-safe fix (no rebase):

git fetch --prune
git merge --no-edit '@{u}'
git push

If the merge conflicts: resolve, commit, push.


D) Open PR + squash-merge via CLI (no website)

Create the PR

From your feature branch:

gh pr create --base main --fill
  • --base main targets main
  • --fill uses commit(s) to populate title/body (GitHub CLI)

Merge it (squash) and delete the branch

When you don’t use auto-merge / checks:

gh pr merge --squash --delete-branch
If your repo requires checks and you want it to merge when ready:

```powershell
gh pr merge --auto --squash --delete-branch
```

Flags are official: --squash, --delete-branch, --auto. (GitHub CLI)

Sync local main after merge (NOT always needed)

git switch main
git sync
git merge --ff-only origin/main

Cleanup local branch

If gh pr merge --delete-branch didn’t remove your local branch (it can vary by setup), delete it explicitly:

git branch -d $branch

E) “I’m mid-branch but main advanced (Codex PR merged)”

Update your branch explicitly (no rebase):

git switch $branch
git sync
git merge origin/main

Then continue work, test, push, and (later) PR + squash merge again.

temporarily relax “PR always” for tiny fixes.

F) I want to quickly fix a typo, without Pull Requests and churn

git switch main; git sync; git merge --ff-only origin/main
# edit typo
git add -A; git commit; git push

Start a brand new project from the CLI

Two common cases.

1) Create a new repo on GitHub + clone it

$repo="my-new-project"
gh repo create $repo --private --clone
cd $repo

gh repo create supports --private/--public and --clone. (GitHub CLI)

Then add your initial files:

ni README.md
git add -A
git commit -m "Initial commit"
git push -u origin main

2) You already have a local folder and want to publish it to GitHub

From inside your project directory:

git init
git add -A
git commit -m "Initial commit"
gh repo create --source=. --private --push
  • --source=. creates the GitHub repo from the current directory
  • --push pushes your initial commit(s) (GitHub CLI)
Topic revision: r8 - 09 Mar 2026, NickDemou
Copyright © enLogic