codipry.

Keyboard shortcuts

Use Ctrl on Windows/Linux or Command on macOS. Shortcuts respect focused text fields.

Ctrl/⌘ K
Open or close tool search
?
Open this reference outside text inputs
Escape
Close the active dialog
Ctrl/⌘ S
Save the current Playground project
Ctrl/⌘ Enter
Run the Playground preview
Tab
Move between controls; inside code typing, insert two spaces
Shift Tab
Move to the previous control

Monaco also provides its own command palette. Browser and operating-system shortcuts can take priority.

Start creating
Frontend PlaygroundcodeResponsive LabcodeGradient GeneratordesignBox Shadow GeneratordesignText Shadow GeneratordesignBorder Radius GeneratordesignFlexbox GeneratordesignCSS Grid GeneratordesignAnimation GeneratordesignGlassmorphism GeneratordesignClip Path GeneratordesignFluid Type GeneratordesignColor StudiodesignGit Command BuildergitGit VisualizergitMerge vs. RebasegitSQL Joins VisualizerdatabaseSQL Clause ExplorerdatabaseDatabase RelationshipsdatabaseSQL FormatterdatabaseSQL PlaygrounddatabaseTyping TestpracticeCode Typing TestpracticeJSON FormattercodeCSV / JSON ConvertercodeText DiffcodeRegex TestercodeEncoding ToolscodeHash GeneratorcodeTimestamp ConvertercodeCSS Transform GeneratordesignCSS Filter GeneratordesignDesign Token ExporterdesignGit Conflict TrainergitSQL Schema Explorerdatabase
A practical experiment

Choose merge or rebase deliberately

Understand which parent links and commit IDs change before rewriting a branch.

First ask whether the commits are shared

Merge and rebase integrate work but preserve different historical facts. Before choosing, ask who depends on the commits you would change. A private topic branch gives you more freedom than a branch teammates have pulled.

A commit records a snapshot and parent links. Its ID depends on its contents and history. Replaying the same patch on a different parent still creates a different commit ID.

What a merge keeps

When branches diverge, a merge commit has two parents. Both histories remain connected. This makes the point where a feature joined the main branch explicit.

If the current branch is behind the target, Git can fast-forward: move the branch name without creating a commit. --no-ff asks for a merge commit even when that move is possible.

git switch main
git status
git merge --no-ff feature/idea

What a rebase replaces

Rebase replays changes unique to a branch onto a new base. The result can be linear, but those copied commits have new IDs. Old commits may remain in a local reflog temporarily; that is not a permanent backup.

git switch feature/idea
git status
git rebase main

Read the state before running either sequence. Uncommitted changes and conflicts deserve deliberate attention. Understand each side of a conflict before selecting a resolution; blindly keeping one side can discard the other change.

A force push is a separate decision

Rebasing locally does not automatically rewrite a remote branch. Publishing a rewritten branch may require a non-fast-forward update. --force-with-lease checks an expected remote state and is safer than unconditional force, but can still replace shared history. Coordinate first.

Try the same story twice

The example starts with a feature change and an independent main-branch change. Compare merge and rebase. Count parents and inspect the feature commit's ID. Load either result into the simulator, reset softly, and inspect the index and working-tree snapshots before trying a hard reset.

The simulator stops at conflicts and handles linear rebase histories. It never accesses a real repository or invents a conflict resolution.

Put the idea to work

Try the live example

Opening Git Visualizer…

The example loads on request so the guide stays quick to read. Open the full tool ↗