diff --git a/server/git/example.go b/server/git/example.go
new file mode 100644
index 0000000..c261604
--- /dev/null
+++ b/server/git/example.go
@@ -0,0 +1,149 @@
+package git
+
+import (
+	"context"
+	"fmt"
+	"log"
+)
+
+// Example demonstrates how to use the Git interface
+func Example() {
+	ctx := context.Background()
+
+	// Create a new Git instance
+	git := DefaultGit("/path/to/your/repo")
+
+	// Get repository status
+	status, err := git.Status(ctx)
+	if err != nil {
+		log.Fatalf("Failed to get status: %v", err)
+	}
+
+	fmt.Printf("Current branch: %s\n", status.Branch)
+	fmt.Printf("Repository is clean: %t\n", status.IsClean)
+
+	// List branches
+	branches, err := git.ListBranches(ctx)
+	if err != nil {
+		log.Fatalf("Failed to list branches: %v", err)
+	}
+
+	fmt.Println("Branches:")
+	for _, branch := range branches {
+		current := ""
+		if branch.IsCurrent {
+			current = " (current)"
+		}
+		fmt.Printf("  %s%s\n", branch.Name, current)
+	}
+
+	// Get recent commits
+	logOptions := LogOptions{
+		MaxCount: 5,
+		Oneline:  true,
+	}
+
+	commits, err := git.Log(ctx, logOptions)
+	if err != nil {
+		log.Fatalf("Failed to get log: %v", err)
+	}
+
+	fmt.Println("Recent commits:")
+	for _, commit := range commits {
+		fmt.Printf("  %s: %s\n", commit.Hash[:8], commit.Message)
+	}
+}
+
+// ExampleWorkflow demonstrates a typical Git workflow
+func ExampleWorkflow() {
+	ctx := context.Background()
+
+	// Initialize a new repository
+	git := DefaultGit("/path/to/new/repo")
+
+	// Initialize the repository
+	if err := git.Init(ctx, "/path/to/new/repo"); err != nil {
+		log.Fatalf("Failed to initialize repository: %v", err)
+	}
+
+	// Set user configuration
+	userConfig := UserConfig{
+		Name:  "John Doe",
+		Email: "john@example.com",
+	}
+
+	if err := git.SetUserConfig(ctx, userConfig); err != nil {
+		log.Fatalf("Failed to set user config: %v", err)
+	}
+
+	// Create a new file and add it
+	// (In a real scenario, you would create the file here)
+
+	// Stage all changes
+	if err := git.AddAll(ctx); err != nil {
+		log.Fatalf("Failed to add files: %v", err)
+	}
+
+	// Commit the changes
+	commitOptions := CommitOptions{
+		AllowEmpty: false,
+	}
+
+	if err := git.Commit(ctx, "Initial commit", commitOptions); err != nil {
+		log.Fatalf("Failed to commit: %v", err)
+	}
+
+	// Create a new branch
+	if err := git.CreateBranch(ctx, "feature/new-feature", ""); err != nil {
+		log.Fatalf("Failed to create branch: %v", err)
+	}
+
+	// Switch to the new branch
+	if err := git.Checkout(ctx, "feature/new-feature"); err != nil {
+		log.Fatalf("Failed to checkout branch: %v", err)
+	}
+
+	fmt.Println("Repository initialized and feature branch created!")
+}
+
+// ExampleRemoteOperations demonstrates remote repository operations
+func ExampleRemoteOperations() {
+	ctx := context.Background()
+
+	git := DefaultGit("/path/to/your/repo")
+
+	// Add a remote
+	if err := git.AddRemote(ctx, "origin", "https://github.com/user/repo.git"); err != nil {
+		log.Fatalf("Failed to add remote: %v", err)
+	}
+
+	// List remotes
+	remotes, err := git.ListRemotes(ctx)
+	if err != nil {
+		log.Fatalf("Failed to list remotes: %v", err)
+	}
+
+	fmt.Println("Remotes:")
+	for _, remote := range remotes {
+		fmt.Printf("  %s: %s\n", remote.Name, remote.URL)
+	}
+
+	// Fetch from remote
+	fetchOptions := FetchOptions{
+		All:  true,
+		Tags: true,
+	}
+
+	if err := git.Fetch(ctx, "", fetchOptions); err != nil {
+		log.Fatalf("Failed to fetch: %v", err)
+	}
+
+	// Push to remote
+	pushOptions := PushOptions{
+		SetUpstream: true,
+	}
+
+	if err := git.Push(ctx, "origin", "main", pushOptions); err != nil {
+		log.Fatalf("Failed to push: %v", err)
+	}
+}
