100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace

DevOps Reference

Git Commands Reference

Git commands fall into a handful of jobs: recording work (add, commit), moving between lines of work (branch, checkout, merge, rebase), syncing with a remote (fetch, pull, push), reading history (log, diff, blame) and undoing things (restore, reset, revert). This reference lists each command with what it does and a working example.

110 entries8 categoriesFree, no sign-up

Browse by Category

All Git Commands (110)

Setup & Config (10)

Identity, defaults and per-repository settings.

git init

Does

Create a repo

Description

Turns the current directory into a Git repository by creating a .git folder. Existing files are left untracked until you add them.

Example

git init

git clone

Does

Copy a repo

Description

Downloads a full repository including all history, and sets the source up as the remote named origin.

Example

git clone [email protected]:user/repo.git

git clone --depth

Does

Shallow clone

Description

Clones only the most recent commits. Much faster on large repositories, at the cost of an incomplete history.

Example

git clone --depth 1 <url>

git config --global user.name

Does

Set your name

Description

Sets the author name recorded on every commit you make. Without --global it applies to the current repository only.

Example

git config --global user.name "Ada"

git config --global user.email

Does

Set your email

Description

Sets the author email on your commits. This is what hosting platforms match against to attribute the commit to your account.

Example

git config --global user.email [email protected]

git config --list

Does

Show settings

Description

Prints every configuration value in effect, merged from the system, global and repository-level files.

Example

git config --list --show-origin

git config --global alias.<name>

Does

Make an alias

Description

Defines a shorthand for a longer command, so a workflow you run twenty times a day becomes two characters.

Example

git config --global alias.st status

git config core.editor

Does

Set the editor

Description

Chooses the editor Git opens for commit messages and interactive rebases.

Example

git config --global core.editor "code --wait"

git config --global init.defaultBranch

Does

Default branch name

Description

Sets the branch name used by git init for new repositories, commonly main.

Example

git config --global init.defaultBranch main

git help

Does

Read the manual

Description

Opens the full documentation for any command — the authoritative source for the flags this table only samples.

Example

git help rebase

Staging & Committing (16)

Recording work into the repository.

git status

Does

What has changed

Description

Lists staged, unstaged and untracked files, plus how far ahead or behind the branch is from its remote.

Example

git status -sb

git add

Does

Stage a file

Description

Copies the current state of a file into the staging area, marking it for inclusion in the next commit.

Example

git add src/app.ts

git add .

Does

Stage everything

Description

Stages every change under the current directory, including new files. Check git status first — this is how secrets get committed.

Example

git add .

git add -p

Does

Stage hunk by hunk

Description

Walks through each change and asks whether to stage it, so one file can be split across two commits.

Example

git add -p src/app.ts

git add -u

Does

Stage tracked only

Description

Stages modifications and deletions to files Git already tracks, but ignores new untracked files.

Example

git add -u

git commit

Does

Record a commit

Description

Saves the staged snapshot to the repository with a message. Nothing unstaged is included.

Example

git commit -m "Fix login redirect"

git commit -a

Does

Stage and commit

Description

Stages every tracked file that changed and commits in one step. Untracked files are still skipped.

Example

git commit -am "Tidy imports"

git commit --amend

Does

Fix the last commit

Description

Replaces the previous commit with a new one including whatever is staged. Rewrites history, so avoid after pushing.

Example

git commit --amend --no-edit

git commit --fixup

Does

Mark a fix-up

Description

Creates a commit labelled to be squashed into an earlier one by a later autosquash rebase.

Example

git commit --fixup a1b2c3d

git rm

Does

Delete and stage

Description

Removes a file from the working tree and stages the deletion in one step.

Example

git rm old-file.txt

git rm --cached

Does

Untrack, keep file

Description

Stops tracking a file without deleting it — the fix after committing something that should have been ignored.

Example

git rm --cached .env

git mv

Does

Rename and stage

Description

Renames or moves a file and stages the change. Equivalent to mv plus git add plus git rm.

Example

git mv old.ts new.ts

git diff

Does

Unstaged changes

Description

Shows what you have changed but not yet staged, line by line.

Example

git diff

git diff --staged

Does

Staged changes

Description

Shows what is staged and would go into the next commit — the review to do before every commit.

Example

git diff --staged

git diff <a>..<b>

Does

Compare commits

Description

Shows the difference between any two commits, branches or tags.

Example

git diff main..feature

git diff --stat

Does

Change summary

Description

Prints only the files touched and how many lines changed in each, rather than the full patch.

Example

git diff --stat main

Branching & Merging (20)

Working on parallel lines of development.

git branch

Does

List branches

Description

Lists local branches and marks the current one. Add -a to include remote-tracking branches.

Example

git branch -a

git branch <name>

Does

Create a branch

Description

Creates a branch pointing at the current commit without switching to it.

Example

git branch feature/login

git branch -d

Does

Delete a branch

Description

Deletes a branch, refusing if it holds commits not merged anywhere. -D forces it through.

Example

git branch -d feature/login

git branch -m

Does

Rename a branch

Description

Renames a branch. With one argument it renames the branch you are on.

Example

git branch -m old-name new-name

git branch --merged

Does

Find merged branches

Description

Lists branches fully contained in the current one — the safe candidates for deletion.

Example

git branch --merged main

git switch

Does

Change branch

Description

Moves to another branch. The modern, single-purpose replacement for git checkout.

Example

git switch main

git switch -c

Does

Create and switch

Description

Creates a branch and moves onto it in one step.

Example

git switch -c feature/api

git switch -

Does

Previous branch

Description

Jumps back to the branch you were on before, like cd - in a shell.

Example

git switch -

git checkout

Does

Switch (legacy)

Description

The older command that both switches branches and restores files, which is why switch and restore were split out of it.

Example

git checkout main

git merge

Does

Merge a branch

Description

Joins another branch into the current one, creating a merge commit unless it can fast-forward.

Example

git merge feature/login

git merge --no-ff

Does

Force a merge commit

Description

Always creates a merge commit even when a fast-forward is possible, keeping the branch visible in history.

Example

git merge --no-ff feature/login

git merge --squash

Does

Squash merge

Description

Stages the combined result of a branch without committing it, so the whole branch lands as one commit.

Example

git merge --squash feature/login

git merge --abort

Does

Cancel a merge

Description

Restores the state from before the merge started. The escape hatch when conflicts are worse than expected.

Example

git merge --abort

git rebase

Does

Replay commits

Description

Moves your commits so they start from the tip of another branch, producing linear history and new hashes.

Example

git rebase main

git rebase -i

Does

Interactive rebase

Description

Opens an editor listing recent commits so you can reorder, reword, squash or drop them before they are replayed.

Example

git rebase -i HEAD~5

git rebase --onto

Does

Move a range

Description

Transplants a specific range of commits onto a new base — the tool for a branch built on the wrong parent.

Example

git rebase --onto main old-base feature

git rebase --continue

Does

Resume a rebase

Description

Carries on after you have resolved a conflict and staged the result.

Example

git rebase --continue

git rebase --abort

Does

Cancel a rebase

Description

Returns the branch to exactly where it was before the rebase began.

Example

git rebase --abort

git cherry-pick

Does

Copy one commit

Description

Applies the change from a single commit onto the current branch as a new commit.

Example

git cherry-pick a1b2c3d

git cherry-pick -n

Does

Pick without commit

Description

Applies the change and stages it but leaves committing to you, so several picks can be combined.

Example

git cherry-pick -n a1b2c3d

Remotes & Syncing (13)

Exchanging commits with other copies of the repo.

git remote -v

Does

List remotes

Description

Shows the configured remotes and their fetch and push URLs.

Example

git remote -v

git remote add

Does

Add a remote

Description

Registers another copy of the repository under a short name you can then fetch from and push to.

Example

git remote add upstream <url>

git remote set-url

Does

Change a remote URL

Description

Points an existing remote at a different URL — used when switching between HTTPS and SSH.

Example

git remote set-url origin git@...

git remote remove

Does

Delete a remote

Description

Removes a remote and all its remote-tracking branches.

Example

git remote remove upstream

git fetch

Does

Download commits

Description

Retrieves new commits and updates remote-tracking branches without changing your working tree.

Example

git fetch origin

git fetch --all --prune

Does

Fetch and tidy

Description

Fetches from every remote and deletes local remote-tracking branches whose upstream is gone.

Example

git fetch --all --prune

git pull

Does

Fetch and merge

Description

Fetches from the upstream branch and merges it into the current one in a single step.

Example

git pull origin main

git pull --rebase

Does

Fetch and rebase

Description

Replays your local commits on top of the fetched ones instead of merging, avoiding a merge commit on every sync.

Example

git pull --rebase

git push

Does

Upload commits

Description

Sends your commits to the remote branch, refusing if it would discard commits you do not have.

Example

git push origin main

git push -u

Does

Push and track

Description

Pushes and records the remote branch as upstream, so later pushes and pulls need no arguments.

Example

git push -u origin feature/api

git push --force-with-lease

Does

Safe force push

Description

Overwrites the remote branch only if it still matches what you last fetched — the safe form of --force.

Example

git push --force-with-lease

git push --delete

Does

Delete remote branch

Description

Removes a branch from the remote without touching your local copy.

Example

git push origin --delete old-branch

git push --tags

Does

Push tags

Description

Uploads tags, which ordinary pushes do not include.

Example

git push origin --tags

History & Inspection (14)

Reading what happened and who changed what.

git log

Does

Show history

Description

Lists commits from newest to oldest with author, date and message.

Example

git log

git log --oneline --graph

Does

Visual history

Description

Compresses each commit to one line and draws the branch structure as ASCII art.

Example

git log --oneline --graph --all

git log -p

Does

History with diffs

Description

Shows the full patch introduced by each commit alongside its message.

Example

git log -p src/app.ts

git log --author

Does

Filter by author

Description

Restricts the log to commits by a particular person.

Example

git log --author="Ada"

git log --since

Does

Filter by date

Description

Restricts the log to a time window, accepting relative phrases as well as dates.

Example

git log --since="2 weeks ago"

git log -S

Does

Search code history

Description

Finds commits where the number of occurrences of a string changed — how you find when a line was introduced or removed.

Example

git log -S "apiKey"

git log --follow

Does

History across renames

Description

Tracks a file through renames, which plain log stops at.

Example

git log --follow src/new-name.ts

git show

Does

Inspect one commit

Description

Prints a commit's message, metadata and full diff.

Example

git show a1b2c3d

git blame

Does

Who wrote this line

Description

Annotates each line of a file with the commit and author that last changed it.

Example

git blame -L 10,20 src/app.ts

git shortlog -sn

Does

Commits per author

Description

Counts commits by author, sorted — a quick contribution summary.

Example

git shortlog -sn

git reflog

Does

Where HEAD has been

Description

Logs every position HEAD has held locally, including commits no branch points at. This is how you recover from a bad reset.

Example

git reflog

git tag

Does

List or create tags

Description

Names a specific commit, usually a release. With -a it creates an annotated tag carrying a message and author.

Example

git tag -a v1.2.0 -m "Release 1.2.0"

git describe

Does

Name a commit

Description

Produces a human-readable name for a commit based on the nearest tag, used to stamp build versions.

Example

git describe --tags

git shortlog

Does

Grouped log

Description

Groups commit messages by author, the format used to draft release notes.

Example

git shortlog v1.0..v1.1

Undoing Changes (11)

Backing out work safely — and unsafely.

git restore

Does

Discard edits

Description

Throws away unstaged changes to a file, restoring it from the index. The change is not recoverable.

Example

git restore src/app.ts

git restore --staged

Does

Unstage a file

Description

Removes a file from the staging area while keeping your edits in the working tree.

Example

git restore --staged src/app.ts

git restore --source

Does

Restore from a commit

Description

Replaces a file with its contents at a specific commit.

Example

git restore --source HEAD~2 src/app.ts

git reset --soft

Does

Undo commit, keep staged

Description

Moves the branch back but leaves everything staged, ready to be recommitted differently.

Example

git reset --soft HEAD~1

git reset --mixed

Does

Undo commit and staging

Description

The default. Moves the branch back and unstages the changes, leaving them in the working tree.

Example

git reset HEAD~1

git reset --hard

Does

Undo and destroy

Description

Moves the branch back and discards the changes entirely. Recoverable only through the reflog, and only for a while.

Example

git reset --hard HEAD~1

git revert

Does

Undo with a commit

Description

Creates a new commit that reverses an earlier one, leaving history intact. The correct undo on a shared branch.

Example

git revert a1b2c3d

git revert -m 1

Does

Revert a merge

Description

Undoes a merge commit, with -m naming which parent to treat as the mainline.

Example

git revert -m 1 a1b2c3d

git clean -n

Does

Preview cleanup

Description

Lists the untracked files a clean would delete, without deleting anything. Always run this first.

Example

git clean -nd

git clean -fd

Does

Delete untracked

Description

Removes untracked files and directories. Not recoverable — nothing was ever committed.

Example

git clean -fd

git checkout --

Does

Discard (legacy)

Description

The older way to throw away working-tree changes to a file, now better expressed as git restore.

Example

git checkout -- src/app.ts

Stashing & Cleanup (8)

Parking work in progress and clearing junk.

git stash

Does

Park changes

Description

Saves uncommitted changes onto a stack and returns the working tree to a clean state.

Example

git stash

git stash -u

Does

Stash untracked too

Description

Includes untracked files in the stash, which the plain command leaves behind.

Example

git stash -u

git stash push -m

Does

Named stash

Description

Stashes with a message, so a stack several deep is still readable.

Example

git stash push -m "wip: search"

git stash list

Does

List stashes

Description

Shows the stash stack with the branch and message of each entry.

Example

git stash list

git stash pop

Does

Restore and remove

Description

Reapplies the most recent stash and deletes it from the stack.

Example

git stash pop

git stash apply

Does

Restore and keep

Description

Reapplies a stash but leaves it on the stack, so it can be applied to another branch too.

Example

git stash apply stash@{2}

git stash drop

Does

Delete a stash

Description

Removes one entry from the stash stack without applying it.

Example

git stash drop stash@{0}

git gc

Does

Compact the repo

Description

Garbage-collects unreachable objects and repacks the database, shrinking a repository that has grown slow.

Example

git gc --aggressive --prune=now

Advanced & Rewriting (18)

Submodules, worktrees, bisect and history surgery.

git bisect start

Does

Hunt a bad commit

Description

Begins a binary search through history to find the commit that introduced a bug.

Example

git bisect start

git bisect good/bad

Does

Mark a bisect step

Description

Tells the search whether the checked-out commit works, halving the remaining range each time.

Example

git bisect bad HEAD

git bisect run

Does

Automate bisect

Description

Runs a script at each step and uses its exit code to decide, finding the culprit with no manual input.

Example

git bisect run npm test

git worktree add

Does

Second working tree

Description

Checks out another branch into a separate directory sharing the same repository, so you can build two branches at once.

Example

git worktree add ../hotfix hotfix

git worktree list

Does

List worktrees

Description

Shows every working tree attached to the repository and the branch each holds.

Example

git worktree list

git submodule add

Does

Nest a repo

Description

Embeds another repository at a fixed commit inside this one.

Example

git submodule add <url> libs/vendor

git submodule update --init

Does

Fetch submodules

Description

Clones and checks out the submodules a fresh clone leaves empty. --recursive handles nested ones.

Example

git submodule update --init --recursive

git rebase --autosquash

Does

Apply fix-ups

Description

Automatically reorders and squashes commits made with --fixup into their targets.

Example

git rebase -i --autosquash main

git filter-branch

Does

Rewrite all history

Description

Rewrites every commit in a repository. Slow and error-prone — git-filter-repo is the recommended replacement.

Example

git filter-branch --tree-filter ...

git archive

Does

Export a snapshot

Description

Produces a tar or zip of a tree with no .git directory, for shipping a release.

Example

git archive -o rel.zip HEAD

git apply

Does

Apply a patch

Description

Applies a diff file to the working tree without creating a commit.

Example

git apply fix.patch

git format-patch

Does

Export commits

Description

Writes each commit as a mailable patch file, the workflow used by mailing-list projects such as the kernel.

Example

git format-patch -3

git cherry

Does

Find unmerged commits

Description

Lists commits on one branch that have not been applied to another, matched by content rather than hash.

Example

git cherry -v main feature

git fsck

Does

Check integrity

Description

Verifies the object database and reports dangling commits — another route to recovering lost work.

Example

git fsck --lost-found

git rev-parse

Does

Resolve a reference

Description

Turns a name such as HEAD or a branch into the full commit hash. The building block of Git scripting.

Example

git rev-parse --short HEAD

git update-ref

Does

Move a ref directly

Description

Sets a branch or tag to a specific commit without checking anything out.

Example

git update-ref refs/heads/main a1b2c3d

git sparse-checkout

Does

Partial checkout

Description

Populates only chosen directories of a large monorepo in the working tree.

Example

git sparse-checkout set apps/web

git notes add

Does

Annotate a commit

Description

Attaches a note to a commit without altering it, so review or build metadata can be added after the fact.

Example

git notes add -m "Reviewed" a1b2c3d

Frequently Asked Questions

What is the difference between git reset and git revert?

git reset moves the branch pointer backwards, so the commits stop being part of the branch — it rewrites history and is unsafe on a branch others have pulled. git revert creates a new commit that undoes an earlier one, leaving history intact, which is the correct choice on any shared branch.

What is the difference between git merge and git rebase?

Merge joins two branches with a merge commit, preserving exactly what happened. Rebase replays your commits on top of another branch, producing a linear history but new commit hashes. Rebase branches you have not pushed; merge anything others have already pulled.

How do I undo the last commit but keep my changes?

Run git reset --soft HEAD~1. The commit is removed and everything it contained is left staged, ready to recommit. Use --mixed to leave the changes unstaged instead, and --hard only when you genuinely want the work destroyed.

What is the difference between git fetch and git pull?

git fetch downloads new commits from the remote and updates your remote-tracking branches without touching your working tree. git pull does a fetch and then immediately merges (or rebases) into your current branch. Fetch first when you want to look before you integrate.

Related Reading

Frequently Asked Questions

21 categories · pick one to explore

What is SkillVeris?
SkillVeris is a completely free tech-upskilling platform offering 37 live courses across AI/ML, programming, web development, DevOps, cloud, security and databases. It combines structured courses of 24–40 lessons, a 24/7 AI Mentor, and a unique Learn Through Hobbies method that explains technical concepts through cricket, music, gaming, cooking and more. It is powered by Sri Hayavadhana.
Is SkillVeris really a free learning platform?
Yes, SkillVeris is genuinely free. Every course, assessment, certificate, study note, cheat sheet and the AI Mentor are available at no cost. There are no hidden paywalls, trial periods or premium tiers locking away lessons. The platform was built to make quality tech education accessible to learners in India and worldwide without financial barriers.
Who is SkillVeris for?
SkillVeris is for anyone learning technology skills: complete beginners starting to code, students preparing for placements, working professionals switching into AI, DevOps or cloud roles, and hobbyists exploring new tools. Courses span beginner to advanced levels, and the Learn Through Hobbies method makes complex topics approachable even if you have no technical background at all.
What makes SkillVeris different from other online learning platforms?
SkillVeris stands out with its Learn Through Hobbies method, which teaches every concept through analogies from cricket, music, gaming, cooking and eight more domains you can switch instantly. Add a free 24/7 AI Mentor, structured courses of 24–40 lessons with certificates, Code Lab for in-browser practice, and a live jobs portal, all completely free of charge.
What can I learn on SkillVeris?
You can learn AI and machine learning, Python, programming fundamentals, web development, DevOps, cloud computing, security and databases through 37 live courses. Beyond courses, SkillVeris offers study notes, cheat sheets, a glossary of roughly 2,000+ terms, 500+ blog articles, interview questions with readiness scoring, and Code Lab supporting six programming languages.
Does SkillVeris offer personalized learning?
Yes, personalization is central to SkillVeris. You choose the analogy domain that matches your interests, cricket, gaming, music, cooking and more, and lessons instantly adapt their explanations. The AI Mentor answers your questions at Quick, Detailed or Deep-dive depth, and learning paths guide you toward specific careers like AI Engineer or DevOps Engineer.
Do I need any prior experience to start learning on SkillVeris?
No prior experience is needed. Many SkillVeris courses are designed for absolute beginners, starting from fundamentals and building up gradually across 35 structured lessons. The Learn Through Hobbies analogies explain technical ideas using everyday interests, so newcomers grasp concepts faster. Intermediate and advanced courses are also available when you are ready to progress.
How do I get started with SkillVeris?
Simply visit skillveris.com, create a free account, and pick a course from the Topics page or follow a learning path like AI Engineer or Full Stack Java Developer. Choose your favourite analogy domain, work through the lessons, pass the module assessments and final exam, and earn your certificate, all without paying anything.
Is SkillVeris available in India?
Yes, SkillVeris is fully available in India and is built with Indian learners strongly in mind. All 37 courses, certificates and tools are free, and the jobs portal aggregates live roles across India alongside the UK, USA, Germany and remote positions, with salary and experience filters to help you find relevant opportunities.
Can I use SkillVeris on my mobile phone?
Yes, SkillVeris works in any modern mobile browser, so you can read lessons, switch analogy domains, ask the AI Mentor questions and take assessments from your phone. The platform is designed to load fast on mobile connections, making it practical to learn during commutes or short breaks without needing a laptop.
What is the Learn Through Hobbies method on SkillVeris?
Learn Through Hobbies is SkillVeris's signature teaching approach: every key concept is explained through analogies drawn from twelve domains including cricket, music, gaming, cooking, fitness, travel and finance. You pick the domain you love and can switch instantly, so abstract topics like machine learning pipelines feel familiar rather than intimidating.
Does SkillVeris have an AI tutor?
Yes, SkillVeris includes a built-in AI Mentor available 24/7. You can ask it any question about your lessons or technology in general and choose the depth of the answer: Quick for a fast summary, Detailed for a fuller explanation, or Deep-dive for a thorough walkthrough. It is free for every learner.
Does SkillVeris help with job hunting?
Yes, SkillVeris has a jobs portal aggregating live roles across India, the UK, USA, Germany and remote positions, with salary and experience filters. Combined with interview questions featuring readiness scoring, career-focused learning paths and free certificates you can share, the platform supports your job search from skill-building through to applications.
What learning paths does SkillVeris offer?
SkillVeris offers career-oriented learning paths such as AI Engineer, DevOps Engineer and Full Stack Java Developer, among others. Each path sequences relevant courses in a logical order so you build skills progressively toward a specific role, rather than guessing which course to take next. All path courses are free and include certificates.
How much time do I need to complete a SkillVeris course?
It depends on your pace. Structured courses contain 24–40 lessons (most have 35) plus module assessments and a final exam, and each lesson typically takes around half an hour of focused reading and practice. Many learners finish a course in a few weeks studying part-time, while dedicated full-time learners can move considerably faster.
Can I practice coding on SkillVeris?
Yes, SkillVeris includes Code Lab, an in-browser coding environment supporting six programming languages across 15 practice categories. You can write and run code directly in your browser without installing anything, which makes it easy to reinforce what you learn in lessons immediately. Code Lab is free, like everything else on the platform.
Does SkillVeris have free study materials besides courses?
Yes, alongside courses SkillVeris offers free study notes, cheat sheets for quick revision, a glossary of roughly 2,000+ technical terms, more than 500 blog articles, and interview questions with readiness scoring. These resources complement the courses and are handy for exam preparation, interviews and quick refreshers, all at no cost.
Who powers SkillVeris?
SkillVeris is powered by Sri Hayavadhana. The platform's mission is to make high-quality technology education free and genuinely engaging, combining structured courses, an always-available AI Mentor and the Learn Through Hobbies analogy method so learners in India and around the world can upskill without cost being a barrier.
Is SkillVeris suitable for working professionals switching careers?
Yes, career switchers can follow structured learning paths like AI Engineer or DevOps Engineer, study flexibly around work using mobile-friendly lessons, and validate their progress through assessments and certificates. The jobs portal with salary and experience filters, plus interview questions with readiness scoring, helps professionals move into new tech roles confidently.
How is SkillVeris free, is there a catch?
There is no catch. SkillVeris does not charge for courses, certificates, the AI Mentor, Code Lab or any learning resource, and there are no trial expirations or locked premium content. The platform exists to make tech education accessible, particularly for learners in India and other regions where paid platforms are often out of reach.

What Learners Say

Real journeys from the SkillVeris community — swipe for more.

SkillVeris taught me Python through Cricket. Now I’m building real projects and feeling confident!
Arjun S. · B.Tech Student
The best platform for hobby-based learning. Concepts finally stick.
Priya R. · Data Analyst
I went from zero coding to a portfolio of projects — all by learning through my love for gaming. Landed my first internship!
Kabir M. · CS Undergraduate
Trending Topics50 popular tags — tap to explore
Trending CoursesAll 37 free courses — tap to browse