Creating Orphan Branches
What is an Orphan Branch?
An orphan branch is an independent branch with no commit history that doesn't share any history with other branches. This type of branch is commonly used to create completely independent content, such as GitHub Pages websites or documentation pages.
Use Cases
- GitHub Pages: Create a
gh-pagesbranch to host static websites - Documentation Sites: Documentation independent from the main codebase
- Independent Projects: Manage completely different content within the same repository
Creating an Orphan Branch
Step 1: Create a New Orphan Branch
git checkout --orphan gh-pages
This command creates a new branch named gh-pages without inheriting any commit history.
Step 2: Clear the Working Directory
After creating an orphan branch, all files remain in the working directory (in staged state). You need to remove these files:
git rm -rf .
Step 3: Add New Content
Now you can add new files to this branch:
# Create a new HTML file
echo '<!DOCTYPE html>
<html>
<head>
<title>My GitHub Pages</title>
</head>
<body>
<h1>Welcome to My GitHub Pages</h1>
<p>This is a static page hosted on GitHub Pages.</p>
</body>
</html>' > index.html
# Add and commit
git add index.html
git commit -m "Initial commit for gh-pages"
Step 4: Push to Remote
git push origin gh-pages
If this is the first time pushing this branch, you may need to set the upstream branch:
git push -u origin gh-pages
Switching Between Branches
Switch Back to Main Branch
git checkout master
# or
git checkout main
Switch to Orphan Branch
git checkout gh-pages
Complete Example: Creating GitHub Pages
Here are the steps to create a complete GitHub Pages website:
# 1. Create orphan branch
git checkout --orphan gh-pages
# 2. Remove all files
git rm -rf .
# 3. Create simple website structure
mkdir -p css js
# 4. Create index.html
cat > index.html << 'EOF'
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Project Documentation</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<header>
<h1>Project Documentation</h1>
</header>
<main>
<section>
<h2>Welcome</h2>
<p>This is a static documentation website built with GitHub Pages.</p>
</section>
</main>
<footer>
<p>© 2025 My Project</p>
</footer>
</body>
</html>
EOF
# 5. Create CSS stylesheet
cat > css/style.css << 'EOF'
body {
font-family: Arial, sans-serif;
line-height: 1.6;
margin: 0;
padding: 20px;
max-width: 800px;
margin: 0 auto;
}
header {
background: #333;
color: #fff;
padding: 1rem;
margin-bottom: 2rem;
}
footer {
margin-top: 2rem;
padding: 1rem;
background: #f4f4f4;
text-align: center;
}
EOF
# 6. Create .gitignore (if needed)
echo "*.log" > .gitignore
# 7. Commit all changes
git add .
git commit -m "Initial GitHub Pages setup"
# 8. Push to remote
git push -u origin gh-pages
Enabling GitHub Pages on GitHub
- Go to your repository's Settings
- Find the Pages section
- Under Source, select the
gh-pagesbranch - Choose either the root directory
/ (root)or/docsfolder - Click Save
Your website will be live at https://<username>.github.io/<repository>/.
Deleting an Orphan Branch
If you no longer need the branch:
# Delete local branch
git branch -D gh-pages
# Delete remote branch
git push origin --delete gh-pages
Important Notes
- Orphan branches are completely independent and don't affect other branches
- The working directory content changes completely when switching branches
- Make sure to commit or stash your changes before switching branches
- Orphan branches are perfect for hosting static content unrelated to the main codebase