Guide contents

Merget and Git

The first question every engineer asks. The answer: Merget is its own version control system, and it coexists with Git rather than replacing it.

What that means in practice

Merget keeps its own complete history: its own object store and references, inside the .merget/ folder of your repo. It does not read or write your Git history during normal work. A repo can have both .merget/ and .git/ side by side; Merget ignores .git/, and Git (via .gitignore) should ignore .merget/.

  • You can keep using Git for whatever your team already uses it for: GitHub PRs, CI, deployment. Merget keeps its own history separately and never writes to your Git repo or pushes to your Git remotes on your behalf.
  • You can import Git history into Merget: one command, merget import git (or "Import Local Git" on the Dashboard), covers both directions: run it inside a repo to link it to Merget and pull in its local .git history, or point it at a remote URL with --url to clone and import a Git repo from GitHub, GitLab, and the like. Each imported commit becomes a goal, with prompts and steps reconstructed inside it from the commit message and diff; the original authorship is preserved.
  • You can link a GitHub repo so Merget knows where its Git counterpart lives.

What Merget does differently

Git conceptMerget
CommitStep - an atomic change. The why behind it lives in the prompt and goal it belongs to, not in the step itself.
BranchA Git branch is two things at once - a name and a divergent line of work. Merget splits them: a fork is the divergent line (it rejoins through a merge), and a bookmark is just a name you move deliberately. See the history model.
Commit messageWritten for you: steps get headlines, and goals/prompts give the why a structure.
Staging area (git add)None. Committing is automatic (or one Commit button in manual mode). There's nothing to stage.
rebase / cherry-pick / stashNone. History is immutable; lines combine by merging.
blamemerget blame - but it answers with the prompt behind a line, not just a name and date.
Object IDsContent-addressed object IDs, the same idea as Git's.
Under the hood

The storage model will feel familiar if you know Git internals: immutable content-addressed objects (file blobs, directory trees, and the goal/prompt/step objects) plus named refs. The differences are what's in the graph (intent objects and transcripts are first-class, not commit-message conventions) and what's deliberately absent: no index, no mutable history operations. If you can't rewrite history, you don't need the tooling for rewriting history safely.

Which one is "the truth"?

For a repo you work on with Merget, treat Merget as the source of truth for history and intent, and Git as an export/interop surface. The agent skill shipped with Merget teaches your coding agent the same rule: in a Merget repo, agents commit, check out, and merge through Merget. See Your agent and Merget.

What Merget doesn't try to be

  • It is not a Git client; it won't run your Git workflows for you.
  • It doesn't sync through Git remotes. Merget repos sync through Merget remotes.
  • It can't recover intent that was never recorded. When you import Git history, Merget reconstructs a goal-and-prompt structure from each commit's message and diff - but that's derived after the fact, not the real prompts behind the work. Capturing the genuine why starts the day you start using Merget.

Next: Sync & privacy | Related: Dashboard (importing) | The history model | CLI reference