Mercurial Hg
Mercurial is a distributed version control system (DVCS) suitable for scenarios ranging from small personal projects to large-scale enterprise projects.
Quick Start
Initialize New Repository
hg init myproject
cd myproject
Clone Existing Repository
hg clone https://example.com/repo myproject
Basic Workflow
# Check current status
hg status
# Add files
hg add file1 file2
# Commit changes
hg commit -m "Describe your changes"
# Pull remote changes
hg pull
# Push local changes
hg push
Common Scenarios
View History
# Short history
hg log
# Detailed history
hg log -v
# History for specific file
hg log path/to/file
# Graphic history
hg log -G
Undo Operations
# Revert uncommitted changes
hg revert file
# Revert all uncommitted changes
hg revert --all
# Backout to specific changeset (keep history)
hg backout <revision>
# Strip to specific changeset (remove history)
hg strip <revision>
When to Read Reference Documentation
| Scenarios | Reference Doc |
|---|---|
| Detailed basic commands, understanding file status | basics.md |
| Create, switch, and merge branches | branches.md |
| Complex merges, conflict resolution, rebase, histedit | advanced.md |
| Team collaboration, code review, multi-repo management | collaboration.md |
| Patch Queue (MQ) operations | mq.md |
| Configure ~/.hgrc, enable extensions, custom aliases | config.md |
| Troubleshoot common issues, recover lost commits | troubleshooting.md |
Comparison with Git
| Mercurial | Git |
|---|---|
| hg commit | git commit |
| hg pull + hg update | git pull |
| hg push | git push |
| hg branches | git branch -r |
| hg bookmark | git branch |
| hg merge | git merge |
| hg rebase | git rebase |
| hg share | git worktree |
Best Practices
- Check before commit: Use
hg diffandhg statusto confirm changes - Descriptive commit messages: Commit messages should clearly explain changes
- Pull frequently: Use
hg pull -uto regularly get remote updates - Use bookmarks: For branching workflows, use bookmarks instead of named branches
- Handle conflicts: When merging conflicts, carefully check each conflicted file
- Get help: For any unclear command, use
hg help --verbose <command>to view official documentation
Important Concepts
- Changeset: Basic unit of commit in Mercurial, identified by hash or revision number
- Repository: Complete copy containing project history and current working directory
- Working Directory: Files currently being edited
- Tip: The latest changeset of the current branch
- Head: A changeset with no successors